Python关键字参数相互引用

时间:2013-02-24 11:02:59

标签: python keyword-argument

当我尝试以下操作时出现错误

def test_func(key1=2.7, key2=key1*3.5):
    print(key1, key2)

NameError: name 'key1' is not defined

我的解决方案就像是

def test_func(key1=2.7, key2=None):
    if not key2:
        key2 = key1*3.5

    print(key1, key2)

但这看起来有点难看。有人有更好的解决方案吗?

修改

所以我的最终解决方案是

def test_func(key1=2.7, key2=None):
    if key2 is not None:
        key2 = key1*3.5

    print(key1, key2)

感谢所有答案

2 个答案:

答案 0 :(得分:5)

不,没有更好的解决方案。

函数参数定义可以是表达式,但它们仅在一次时进行评估(有时会让人感到惊讶,请参阅"Least Astonishment" and the Mutable Default Argument)。

答案 1 :(得分:0)

我的解决方案是:

def t(key1=1, **kwargs):
    key2 = kwargs.get('key2', key1*2.7)

从kwargs获取key2并使用默认key1 * 2.7

从中获取数据