3

どういうわけか、条件付きステートメントをオプションの引数に割り当てることは可能ですか?

次の構成を使用した最初の試みは失敗しました。

y = {some value} if x == {someValue} else {anotherValue}

ここで、x は事前に割り当てられています。

より具体的には、関数のシグネチャを次のようにします。

def x(a, b = 'a' if someModule.someFunction() else someModule.someOtherFunction()):
   :
   :

どうもありがとう

4

1 に答える 1

8

確かに、それはまさにあなたのやり方です。bのデフォルト値は、関数を定義した直後に設定されることに注意してください。これは望ましくない場合があります。

def test():
    print("I'm called only once")
    return False

def foo(b=5 if test() else 10):
    print(b)

foo()
foo()

そして出力:

I'm called only once
10
10

これが可能だからといって、そうすべきだという意味ではありません。少なくとも私はしません。プレースホルダーとして使用する詳細な方法Noneは、理解しやすいです。

def foo(b=None):
    if b is None:
        b = 5 if test() else 10

    print b
于 2013-07-19T09:18:03.927 に答える