请考虑简单的功能:
def fun(x, y, param1=10, param2=param1/3):
do something
不应要求param1
和param2
但可由用户设置。如果未设置param2
,则值会以某种方式依赖于param1
。
以上示例将引发NameError: name 'param1' is not defined
有没有办法在Python中进行这种赋值?
答案 0 :(得分:12)
一种方法是在函数内部模拟:
def fun(x, y, param1=10, param2=None):
if param2 is None:
param2 = param1/3
# do something
如果param2=None
是fun()
的有效输入,则以下可能是更好的选择:
default = object()
def fun(x, y, param1=10, param2=default):
if param2 is default:
param2 = param1 / 3
# do something
(我已经看了几分钟的第二个例子,我实际上非常喜欢is default
语法。)
原始版本不起作用的原因是在函数定义时计算并绑定默认值。这意味着你不能拥有一个默认值,它取决于在调用函数之前不知道的东西(在你的情况下,是param1
的值)。