为什么这个调用不需要定义的 2 个参数?

问题描述 投票:0回答:2

为什么这段代码有效?具体来说,当 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()
python python-3.x python-click
2个回答
0
投票

装饰器语法

@decorator
def func():
    pass

实际上只是语法糖:

def func():
    pass

func = decorator(func)

IOW,它将函数名称重新绑定到装饰器的返回值 - 最常见的是,返回包装装饰器的另一个函数。

因此,在您的示例中,您在主要部分中调用的

run()
函数确实不是您定义的
run()
函数,而是装饰器返回的函数 - 它不期望参数,因为装饰器的重点是收集这些参数并将其提供给您的原始函数;-)


0
投票

这与普通函数不同,我们不需要像平常那样传递参数。

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!
© www.soinside.com 2019 - 2024. All rights reserved.