具有依赖预设参数的函数

9 投票
1 回答
2659 浏览
提问于 2025-04-17 10:28

请考虑一个简单的函数:

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

在这个函数中,param1param2 不是必须的,用户可以选择设置它们。如果 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 的值)。

撰写回答