Pythonで操作が失敗したことを示す正しい方法は何ですか。このコードでは、戻り値はどうあるべきですか?
def compare(y,x):
if y == x:
return 'true'
return 'false'
Pythonで操作が失敗したことを示す正しい方法は何ですか。このコードでは、戻り値はどうあるべきですか?
def compare(y,x):
if y == x:
return 'true'
return 'false'
Pythonにはリテラル値がTrue
あり、False
これを使用できます。ただし、ほとんどの場合、比較操作ではどちらかの値が返されるため、これらを明示的に使用する必要はほとんどありません。たとえば、関数を次のようにやり直すことができます。
def compare(y, x):
return y == x
必要に応じて、非ブール値を「true」または「false」と見なすことができることにも注意してください。「偽の」値はNone
、0
およびすべての空のコンテナ(空の文字列''
、空のリスト[]
、空のタプル()
、空の辞書{}
など)です。ほとんどの種類のオブジェクトのすべてのインスタンスを含め、他のすべてはデフォルトで「真実」です。
__nonzero__
カスタムクラスは、魔法のメソッド(__bool__
Python 3では名前が変更されています)を実装することでブール変換を定義できます。存在しない場合、Pythonはをチェックし__len__
、存在しない場合はあきらめて、すべてのインスタンスが真であると想定します。
あなたの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)
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