生信log29|python装饰器一览及其在生信的作用(含命令行装饰器click的简单使用)

此前参加了一些生信的开源项目,在项目的代码中知道了“装饰器”的概念,也了解到了python中一些造好的装饰器。参与开源项目,先从python装饰器了解函数式编程开始

1、python装饰器是什么?

装饰器到底实现了什么

实现了函数式编程,讲人话就是做了函数一个外包的壳,数学公式中的f(g(x))中的f()。

  • 语法糖(@外包函数名字)
def wrapper():
    func = function()
    func.split()
    return wrapper

@wrapper
def hello_world():
  value = print("hello,world")
  return value

常见的例子

  • 外包在运行脚本外的计时脚本
  • 用装饰器去生成HTML

2、python装饰器一览

一些官方的装饰器:

  • click:一个传外部参数的装饰器
    这个官方的装饰品实在是太好用啦,不仅可以取代argparse(click官方的解释是argparse不能分辨agrument 和option的类型,不能进行判断,并且在命令行不完整的情况下很容易出错)
  • 下面是官方的例子
import click

@click.command()
@click.option('--count', default=1, help='Number of greetings.')
@click.option('--name', prompt='Your name',
              help='The person to greet.')
def hello(count, name):
    """Simple program that greets NAME for a total of COUNT times."""
    for x in range(count):
        click.echo(f"Hello {name}!")

if __name__ == '__main__':
    hello()
  • 而且click是一个命令的nest,允许开发者建立subcommand。
  • 个人使用感受:比argparse更容易添加子命令,形式上更加简单,而且很多开源项目都用到了click去管理软件中的子命令。

3、生信中的作用和IT中的作用

  • 增加新的功能而不改变原来函数的结构
  • 在开源项目中增加自己需要的新功能(通常是subcommand)
  • 在自己的项目增加新的功能,或者为自己的项目开源作准备(同上)

参考
click官方文档
click中option和argument的区别

你可能感兴趣的:(生信log29|python装饰器一览及其在生信的作用(含命令行装饰器click的简单使用))