【问题标题】:Python: call function with default arguments that come before positional argumentsPython:使用位置参数之前的默认参数调用函数
【发布时间】:2017-10-23 14:40:21
【问题描述】:

例如,我想做这样的事情:greet(,'hola'),greet 是:

def greet(person='stranger', greeting='hello')

这对编写代码时的测试很有帮助

【问题讨论】:

标签: python parameters arguments parameter-passing optional-parameters


【解决方案1】:

在不知道其他参数的情况下,只知道要更改的参数在第二个位置,您可以使用inspect 模块来获取函数签名和相关的默认值。

然后复制默认值列表并在您想要的索引处更改一个:

import inspect

def greet(person='stranger', greeting='hello'):
    print(person,greeting)


argspec = inspect.getargspec(greet)

defaults = list(argspec.defaults)
defaults[1] = "hola"  # change second default parameter

greet(**dict(zip(argspec.args,defaults)))

假设 all 参数有默认值(否则它会移动失败的列表):

stranger hola

【讨论】:

    【解决方案2】:

    在调用函数时,您可以使用变量名称来更清楚地了解哪个变量将采用哪个值。同时,如果函数定义中提供了默认值,则在调用函数时跳过变量不会引发任何错误。所以,简而言之,你可以这样做:

    def greet(person='stranger', greeting='hello')
        print('{} {}'.format(greeting, person))
        return
    
    greet(greeting='hola')  # same as greet(person='stranger', greeting='hola')
    # returns 'hola stranger'
    

    请注意,正如我上面所说,如果您的函数定义如下:

    def greet(person, greeting)
        print('{} {}'.format(greeting, person))
        return
    

    因为在这种情况下,Python 会抱怨说它不知道如何处理person;没有提供默认值..

    顺便说一句,您所描述的问题很可能是最初使用默认值的原因

    【讨论】:

      猜你喜欢
      • 2017-11-13
      • 1970-01-01
      • 1970-01-01
      • 2012-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-25
      • 2013-06-28
      相关资源
      最近更新 更多