2016-12-14 10 views
0

私はヘッドファーストから以下のようなPythonの関数を見つける:なぜこのPython関数に2回のリターンがありますか?

def san(string): 
    if ':' in string: 
     spliter = ':' 
    elif '-' in string: 
     spliter = '-' 
    else: 
     return string 
    (key, value) = string.split(spliter) 
    return (key, value) 

二回RETURNなぜですか?

+0

他にはない場合は上部に、ELIFに適用されます。下部のリターンは、一貫性のある方法で使用するのは難しいだろうので、それはまた、かなりひどいコードですまだ – pvg

答えて

1

一つは、文字列が分割されていない場合のために、他の文字列を分割した場合のためです。

+1

到達可能です。あなたは2つのリターンまたは1つを得るかどうかわからないので、結果をチェックするか、戻り値を不透明として扱わなければなりません。正確には理想的ではありません...これは 'str.partition'のような関数が存在する理由です。何があっても一貫した数の戻り値を得ることができます。 – ShadowRanger

+0

ありがとうございます。それは間違っていると私は思う、2つの異なる支店です。 –

+0

@ShadowRangerまた、文字列を3回スキャンします。 re.splitは回答にこだわる価値のあるピオニーの解決策かもしれません – pvg

0

split関数を使用してより前にを返すと、元の文字列が返されます。ブロックの底部に戻り、分割関数が発生した後の値を返すために使用されます。複数のリターンを使用し

は、ほとんどのプログラミング言語では一般的であり、通常、あなたが機能の残りを実行する必要はありませんことを知っているときに、関数から抜け出すために使用されます。これは、例外的な状態に達したときに非常に便利です。そこには、関数呼び出し元がピックアップしてエラーが発生したことを知る特殊なケースを返すことができます。

一部の人々は(それはあなたの例ではありませんように)、それは一貫性のない動作が発生する場合は特に、それは悪いスタイルであると考えていること、しかし、注意してください。

関連する問題