Python:调用函数,默认参数位于位置参数之前

时间:2017-05-23 14:53:56

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

例如,我想做一些事情:greet(,'hola'),greet是:

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

这有助于在编写代码时进行测试

2 个答案:

答案 0 :(得分:3)

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

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;没有提供默认值..

顺便说一下,你所描述的问题很可能就是首先使用默认值的原因

答案 1 :(得分:0)

在不知道其他参数的情况下,只知道您要更改的参数位于第二位置,您可以使用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)))

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

stranger hola