False
何かが見つからない場合に戻り、それ以外の場合は探しているデータ構造を返す関数があります。この関数から返された値をループ内の変数my_var
に代入するときは、続行します。for
if my_var == False: continue
pychecker
はこれが気に入らず、報告しComparisons with False are not necessary and may not work as expected
ます。
これを行うためのPythonの方法は何ですか?
通常、オブジェクトが一致しない場合は、None
代わりに戻ります。False
そして、if my_var == None:
すべてとしてチェックしnot 0
、not False
をnot None
返しTrue
ます。
結果がないことを示す戻り値としては、None
ほとんどの場合優れています。
を使用する必要がある場合はFalse
、 を使用してnot my_var
ください。これは、非False
戻り値が決して「偽」ではないことを前提としています(bool()
これをに変換しますFalse
-これは、空の文字列、空のコレクション、およびその他のいくつかの場合です)。
オブジェクトが偽物である可能性があるが と区別する必要がFalse
ある場合は、比較が必要であり、エラーを無視する必要があります (マイナーなバリエーションで、my_var is False
少し慣用的ですが、実質的には同じです)。しかし、それは良い状況ではなく、明確さを装うために避けるべきです。
繰り返しになりますが、可能であれば、 を使用None
してテストしてmy_var is None
ください。
偽の値を確認したいだけの場合:
myval = findit('something')
if not myval:
"not found"
偽の値を持つ「is-found」ケースの値を実際に返すことができる場合は、これを行いたくありません。たとえば、[]
(空のリスト) が見つかった場合でも、「見つかりません」と報告されます。
それが実際に であることを気にする場合はFalse
、 を使用してis
ください。True
、False
、およびNone
はシングルトンであるため、同一性比較演算子が使用されます。
if myval is False:
"not found"
この場合False
、結果がないことを示すセンチネル値として使用しています。
ただし、通常None
は「値なし」のセンチネルとして使用されるため、関数のシグネチャを変更して、None
値が見つからない場合に返すようにすることをお勧めします。これは、Python のイディオムや などのメソッドの動作によりよく適合します{}.get('missing-key')
。
myval = findit('something')
if myval is None:
"not found"
None
任意の値 (または)が返される可能性があるためにセンチネル値が存在しない場合False
、Python は例外を使用して、値が見つからなかったことを通知します。たとえば{}['missing-key']
、 が発生しKeyError
ます。
この点で、Python は実際には C++ よりも強く型付けされています。True または False にできるのは、真のブール値だけです。
したがってmy_var
、ブール値でなければなりません。したがって、1 つとしてチェックするだけです。
if not my_var:
continue
通常、次のように使用しますnot
。
if not my_var: continue