python - 为什么此调用不需要定义的 2 个参数?
问题描述
为什么这段代码有效?具体来说,当 run() 函数特别需要计数和名称时,为什么我可以不带参数调用它。PyLinter 抱怨此代码并说没有函数 run() 与 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()
解决方案
装饰器语法
@decorator
def func():
pass
实际上只是语法糖:
def func():
pass
func = decorator(func)
IOW,它将函数名称重新绑定到装饰器的返回值 - 大多数情况下,它返回另一个包装装饰器的函数。
因此,在您的示例中,run()
您在 main 部分中调用的函数确实不是run()
您定义的函数,而是您的装饰器返回的函数 - 它不期望参数,因为装饰器的重点是收集并将这些参数提供给您的原始函数;-)
推荐阅读
- r - cmdscale(dist, k = k) 中的错误:在 phyloseq 中执行 plot_heatmap 时,“d”中不允许存在 NA 值
- php - 使用 Docker WSL2 cUrl 错误窗口创建新的 Laravel 项目
- jwt - 生成 JWT 密钥对
- python - 如何使用python检查youtube视频是否存在?
- if-statement - IF 语句重构的理论?
- python - 如何在 Python 中读取 blob 数据
- amazon-web-services - 如何在不手动检查的情况下使用 AWS 状态仪表板进行更新?
- angular - 类型 TranslateModule 没有 'ɵmod' 属性
- react-native - Tab.Navigation 中的道具反应导航不起作用
- python - 如何在第一个非 nan 值之后将 NaN 填充为 0