Python:我们应该在什么时候命名参数';你要过去吗?

Python:我们应该在什么时候命名参数';你要过去吗?,python,Python,我最近一直在学习python,我有点困惑,为什么人们在调用函数时会命名参数,而将参数命名为 把这个代码作为启动器 def my_funcation(greeting = 'Hello', name = 'Guest'): return f'{greeting}, {name}. How are you?' print(my_function('Yo', name = 'Adam')) 看起来都不错,但有一部分我不明白。为什么人们要指定分配给他们的参数名?这是一种惯例还是一种编写好代

我最近一直在学习python,我有点困惑,为什么人们在调用函数时会命名参数,而将参数命名为

把这个代码作为启动器

def my_funcation(greeting = 'Hello', name = 'Guest'):
    return f'{greeting}, {name}. How are you?'


print(my_function('Yo', name = 'Adam'))
看起来都不错,但有一部分我不明白。为什么人们要指定分配给他们的参数名?这是一种惯例还是一种编写好代码的规则

为什么我们不能写下这个

def my_funcation(greeting = 'Hello', name = 'Guest'):
    return f'{greeting}, {name}. How are you?'


print(my_function('Yo', 'Adam'))

依我看,第二个更好,以防参数名称发生变化。

如果不想指定所有参数怎么办

def my_function(greeting = 'Hello', name = 'Guest'):
    return f'{greeting}, {name}. How are you?'

print(my_function(name='ForceBru'))
如果没有此功能,您将无法仅指定第二个参数而不指定其前面的参数


或者,如果函数有大量参数,但是:

  • 其中许多都有默认值
  • 您不想把函数声明弄得乱七八糟
  • 您希望函数调用反映要传递的参数
  • 那你怎么办?基本上是一样的:

    def compute(stuff, **kwargs):
        be_fast = kwargs.get('be_fast')
        be_super_fast = kwargs.get('be_super_fast')
    
        if be_fast and be_super_fast:
            print('Activating turbo mode...')
        elif be_fast:
            print('Accelerating...')
        elif be_super_fast:
            print('Nobody can stop me!')
        else:
            print('I am a tortoise.')
    
        return stuff
    
    然后你可以这样称呼它:

    compute(1)
    compute(1, be_fast=True)
    compute(1, be_super_fast=True)
    compute(1, be_fast=True, be_super_fast=True)
    

    如果你想说“你好,亚当,你好吗?”

    您需要使用
    print(my_函数(name='Adam'))

    使用后,

    print(my_function('Hello', 'Adam'))
    
    这将是多余的

    依我看,第二个更好,以防参数名称发生变化

    在这种特殊情况下,它是。但总的来说,我不会说得更好,但有点不同

    有时,它会为代码添加有用的上下文。 你想读什么:

    enumerate('xyz', 120)  # err...what does that second arg do again?
    

    它允许您修改或重新排序函数的KWARG,而无需更改调用代码。 考虑在前面添加一个新参数:

    def my_function(color='red', greeting='Hello', name='Guest'):
        ...
    

    如果你不修改调用者
    my_函数('Yo','Adam')
    ,你会让他们现在就填充错误的参数-如果你没有很好的测试覆盖率,你可能会很晚才注意到这个错误。

    如果你有多个可选变量,你只想设置其中一个,你就必须使用这个语法。在您的示例中,这并不重要,但是如果您只想更改
    名称
    ,例如,您必须显式使用
    my_函数(name='Chris')
    ,而
    问候语
    将默认为
    'Hello'
    ,函数定义中的那些是默认值。如果在调用函数时没有提供该值,它仍然可以工作。如果您在调用时提供一个值,它将覆盖默认值。您的问题是,如果有默认值,或者如果有些参数有默认值,而有些参数没有默认值,或者如果没有默认值的参数,为什么要命名参数?“如果参数名称发生更改”->这将是一个反对使用有序参数和使用参数名称的参数,因为如果参数(参数)的名称更改,那么它执行的函数可能也会更改(如果没有更改,则不需要重命名…哦,为了可读性,不,抱歉,它已“发布”使用该名称,如果以后需要提高可读性,请在内部将其分配给一个名称更好的变量)。
    def my_function(color='red', greeting='Hello', name='Guest'):
        ...