为什么这个调用不需要定义的 2 个参数?
Why does this call not require 2 arguments as defined?
为什么这段代码有效?具体来说,当 运行() 函数特别需要计数和名称时,为什么我可以调用不带参数的函数。 PyLinter 抱怨这段代码并说没有带有 0 个参数的函数 运行() 。但是代码 运行 没问题。
这是因为装饰器正在添加一个同名的附加函数"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()
这不像是一个普通的函数,我们不需要像往常一样传递参数。
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!
装饰器语法
@decorator
def func():
pass
实际上只是语法糖:
def func():
pass
func = decorator(func)
IOW,它将函数名称重新绑定到装饰器的 return 值 - 通常,return 是包装装饰器的另一个函数。
所以在你的例子中,你在主要部分调用的 run()
函数确实不是你定义的 run()
函数,而是已经 returned 的函数由你的装饰器——它不期望参数,因为装饰器的目的是收集这些参数并将其提供给你的原始函数;-)
为什么这段代码有效?具体来说,当 运行() 函数特别需要计数和名称时,为什么我可以调用不带参数的函数。 PyLinter 抱怨这段代码并说没有带有 0 个参数的函数 运行() 。但是代码 运行 没问题。
这是因为装饰器正在添加一个同名的附加函数"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()
这不像是一个普通的函数,我们不需要像往常一样传递参数。
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!
装饰器语法
@decorator
def func():
pass
实际上只是语法糖:
def func():
pass
func = decorator(func)
IOW,它将函数名称重新绑定到装饰器的 return 值 - 通常,return 是包装装饰器的另一个函数。
所以在你的例子中,你在主要部分调用的 run()
函数确实不是你定义的 run()
函数,而是已经 returned 的函数由你的装饰器——它不期望参数,因为装饰器的目的是收集这些参数并将其提供给你的原始函数;-)