2

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

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)

感谢所有答案

4

2 回答 2

5

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

函数参数定义可以是表达式,但它们只被评估一次(这有时会让人们感到惊讶,请参阅“Least Astonishment”和 Mutable Default Argument)。

于 2013-02-24T11:04:18.587 回答
0

我的解决方案是:

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

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

于 2013-02-24T11:24:40.323 回答