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

いいえ、これ以上の解決策はありません。

関数の引数の定義は式にすることができますが、それらは1 回しか評価されません(人々を驚かせることがあります。「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 に答える