为什么这段代码有效?具体来说,当 run() 函数特别需要 count 和 name 时,为什么我可以不带参数调用 run() 函数。 PyLinter 抱怨这段代码并说没有带有 0 个参数的函数 run() 。但代码运行良好。
这是因为装饰器添加了一个同名“run”但没有参数的附加函数吗?
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 run(count, name):
"""Simple program that greets NAME for a total of COUNT times."""
for x in range(count):
click.echo('Hello %s!' % name)
if __name__ == "__main__":
run()
装饰器语法
@decorator
def func():
pass
实际上只是语法糖:
def func():
pass
func = decorator(func)
IOW,它将函数名称重新绑定到装饰器的返回值 - 最常见的是,返回包装装饰器的另一个函数。
因此,在您的示例中,您在主要部分中调用的
run()
函数确实不是您定义的 run()
函数,而是装饰器返回的函数 - 它不期望参数,因为装饰器的重点是收集这些参数并将其提供给您的原始函数;-)
这与普通函数不同,我们不需要像平常那样传递参数。
Click
帮助您创建命令行界面。>>python your_file_name.py
>>Your name: Sanjay
>>Hello Sanjay!
这里它将打印 Sanjay 一次,因为默认计数设置为 1。
如果您通过计数,它将多次打印名称
>>python your_file_name.py --count=3
>>Your name: Sanjay
>>Hello Sanjay!
>>Hello Sanjay!
>>Hello Sanjay!