False何かが見つからない場合に戻り、それ以外の場合は探しているデータ構造を返す関数があります。この関数から返された値をループ内の変数my_varに代入するときは、続行します。forif 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