相互引用的Python关键字参数

相互引用的Python关键字参数,python,keyword-argument,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=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)

谢谢您的所有回答

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

函数参数定义可以是表达式,但它们只计算一次(有时会让人感到惊讶,请参见)。

我的解决方案是:

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

从kwargs获取key2并使用默认的key1*2.7从中获取数据

也许您甚至应该将其更改为显式的
is key2 is not None
,否则用户将无法将
0
作为第二个参数传递。这些数字只是一个示例,我使用的函数看起来非常不同,但您是对的。我没有想到这一点。这样做的缺点是,如果用户传递一个意外的参数,比如
key3
,则不会出现错误。它只会默默地忽略它。