具有相关预设参数的功能

the*_*eta 9 python

请考虑简单的功能:

def fun(x, y, param1=10, param2=param1/3):
    do something
Run Code Online (Sandbox Code Playgroud)

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

以上示例将提出 NameError: name 'param1' is not defined

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

NPE*_*NPE 12

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

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

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

default = object()

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

(看了几分钟的第二个例子,我其实非常喜欢is default语法.)

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

  • `default`可能会产生误导,'not_set`可能是一个更好的名字.目前尚不清楚(对我而言)`default`不是默认值本身,而是占位符表示应该使用`param2`的默认值. (2认同)