2

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

pycheckerはこれが気に入らず、報告しComparisons with False are not necessary and may not work as expectedます。

これを行うためのPythonの方法は何ですか?

4

5 に答える 5

3

通常、オブジェクトが一致しない場合は、None代わりに戻ります。Falseそして、if my_var == None:すべてとしてチェックしnot 0not Falsenot None返しTrueます。

于 2013-03-05T16:44:16.507 に答える
3

結果がないことを示す戻り値としては、Noneほとんどの場合優れています。

  • を使用する必要がある場合はFalse、 を使用してnot my_varください。これは、非False戻り値が決して「偽」ではないことを前提としています(bool()これをに変換しますFalse-これは、空の文字列、空のコレクション、およびその他のいくつかの場合です)。

  • オブジェクトが偽物である可能性があるが と区別する必要がFalseある場合は、比較が必要であり、エラーを無視する必要があります (マイナーなバリエーションで、my_var is False少し慣用的ですが、実質的には同じです)。しかし、それは良い状況ではなく、明確さを装うために避けるべきです。

繰り返しになりますが、可能であれば、 を使用Noneしてテストしてmy_var is Noneください。

于 2013-03-05T16:41:19.603 に答える
2

偽の値を確認したいだけの場合:

myval = findit('something')
if not myval:
   "not found"

偽の値を持つ「is-found」ケースの値を実際に返すことができる場合は、これを行いたくありません。たとえば、[](空のリスト) が見つかった場合でも、「見つかりません」と報告されます。

それが実際に であることを気にする場合はFalse、 を使用してisください。TrueFalse、および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ます。

于 2013-03-05T16:46:36.927 に答える
1

この点で、Python は実際には C++ よりも強く型付けされています。True または False にできるのは、真のブール値だけです。

したがってmy_var、ブール値でなければなりません。したがって、1 つとしてチェックするだけです。

if not my_var:
     continue
于 2013-03-05T16:39:41.193 に答える
1

通常、次のように使用しますnot

if not my_var: continue
于 2013-03-05T16:36:41.030 に答える