2017-05-18 18 views
0

関数f()のオプションの戻り値を無視するには、どのような方法が適していますか?あなたの関数は、時には2つの変数を返し、一つの変数、別の場合は、トラブルのために自分自身を設定しているPythonスタイル:オプションの戻り値

A)

foo, _ = f() 

B)

foo = f()[0] 

C)

def f(return_bar=True): 
    if return_bar: 
     return foo, bar 
    else: 
     return foo 

foo = f(return_bar=False) 
+0

を行う方が良いでしょうdefinetly 'C'、 'A'は – Netwave

+2

Bより神託である)が最も理にかなっていません。 c)スケーラビリティがなく、a)無駄なオブジェクトのスペースを無駄にするだけです。 – Haris

+0

a)* path、_、os.walk(...)のファイルのように、真ん中の値をスキップしたい場合はいいです* – volcano

答えて

2

時間。通常の変数を無視するようにアンダースコアを使用して

foo, _ = f() 

は、標準的な方法ですが、何らかの理由で、f()にこの呼び出しは1つの変数のみを返した場合、あなたのケースで、あなたは、ランタイムエラーを取得します。

あなたはf() 2つの変数にこの時間を返すことを保証することができなければ、それはこの

foo = f() 

if(isinstance(b, tuple)): 
    foo = foo[0] 
+2

"f()への呼び出しが1つの変数だけを返した場合、実行時エラーが発生します。 'foo、* _ = f()'はPython 3でこれを解決します。 '_'は単に空のリストになります。 – DeepSpace

関連する問題