0

Pythonで操作が失敗したことを示す正しい方法は何ですか。このコードでは、戻り値はどうあるべきですか?

def compare(y,x):
     if y ==  x:
         return 'true'
     return 'false'
4

3 に答える 3

5

Pythonにはリテラル値がTrueあり、Falseこれを使用できます。ただし、ほとんどの場合、比較操作ではどちらかの値が返されるため、これらを明示的に使用する必要はほとんどありません。たとえば、関数を次のようにやり直すことができます。

def compare(y, x):
    return y == x

必要に応じて、非ブール値を「true」または「false」と見なすことができることにも注意してください。「偽の」値はNone0およびすべての空のコンテナ(空の文字列''、空のリスト[]、空のタプル()、空の辞書{}など)です。ほとんどの種類のオブジェクトのすべてのインスタンスを含め、他のすべてはデフォルトで「真実」です。

__nonzero__カスタムクラスは、魔法のメソッド(__bool__Python 3では名前が変更されています)を実装することでブール変換を定義できます。存在しない場合、Pythonはをチェックし__len__、存在しない場合はあきらめて、すべてのインスタンスが真であると想定します。

于 2012-11-12T23:12:20.990 に答える
3

あなたのcompare()例は、2つの理由でこの質問に問題があります。

  • ==通常は、関数を呼び出すのではなく、ベアを使用してPythonでブール比較結果を取得します。
  • ここでの結果はどちらも「成功」でも「失敗」でもないため、タイトルの質問には実際には対応していません。

Pythonでは、関数が成功または失敗を返すのは、戻り値ではなく、例外が発生しない限り成功したと想定するのが一般的です。次の3つの理由から、表示を返すには例外が望ましいです。

  • 彼らは誤って無視するのは難しいです。
  • それ以外の場合は有効な戻り値を予約する必要はありません。
  • これらは、いくつかの関数の戻りを通じてエラー値を明示的に渡す必要なしに、呼び出しツリーの最も便利なポイントで直接処理できます。

よりPythonicな例を次に示します。

def doThing(x,low,high):        
    """
    Do a thing if x is between the low and high values, inclusive. 
    If x is out of bounds, the thing fails.
    """
    if x < low or x > high:
         raise ValueError( "x is out of bounds" )
    return (x-low)/(high-low)
于 2012-11-12T23:40:35.320 に答える
3
def compare(y,x):
     if y == x:
         return True
     return False

または暗黙的:

def compare(y,x):
    return x == y

Pythonブール型の詳細な紹介は次のとおりです:http: //docs.python.org/release/2.3.5/whatsnew/section-bool.html

于 2012-11-12T23:03:33.763 に答える