具有依赖预设参数的函数
请考虑一个简单的函数:
def fun(x, y, param1=10, param2=param1/3):
do something
在这个函数中,param1
和 param2
不是必须的,用户可以选择设置它们。如果 param2
没有被设置,那么它的值会以某种方式依赖于 param1
。
上面的例子会引发一个错误:NameError: name 'param1' is not defined
。
有没有办法在Python中实现这样的赋值呢?
1 个回答
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
的值)。