具有相关预设参数的功能

时间:2012-01-17 19:12:16

标签: python

请考虑简单的功能:

def fun(x, y, param1=10, param2=param1/3):
    do something

不应要求param1param2但可由用户设置。如果未设置param2,则值会以某种方式依赖于param1

以上示例将引发NameError: name 'param1' is not defined

有没有办法在Python中进行这种赋值?

1 个答案:

答案 0 :(得分:12)

一种方法是在函数内部模拟:

def fun(x, y, param1=10, param2=None):
    if param2 is None:
        param2 = param1/3
    # do something

如果param2=Nonefun()的有效输入,则以下可能是更好的选择:

default = object()

def fun(x, y, param1=10, param2=default):
    if param2 is default:
        param2 = param1 / 3
    # do something

(我已经看了几分钟的第二个例子,我实际上非常喜欢is default语法。)

原始版本不起作用的原因是在函数定义时计算并绑定默认值。这意味着你不能拥有一个默认值,它取决于在调用函数之前不知道的东西(在你的情况下,是param1的值)。