10

次のようなコードに出くわしました。

if bool(x):
    doSomething

以下は同じ仕事をするだろうと思います:

if x:
    doSomething

参照は、テスト式が次の場合にスイートを評価すると述べています

真であることが判明

参考文献では、ブール式について次のように述べています。

ブール演算のコンテキストでは、また制御フロー ステートメントで式が使用される場合、次の値は false として解釈されます: False、None、すべての型の数値ゼロ、および空の文字列とコンテナー ...他のすべての値は true として解釈されます。

リファレンスbool()関数について次のように述べています。

標準の真理値テスト手順を使用して、値をブール値に変換します

では、上記の 2 つは同一ですか、それとも特別な点がありますか?

4

4 に答える 4

15

オブジェクトは、if ステートメントに配置されると暗黙的に bool 型に変換されます。そのため、ほとんどの場合、ステートメント内でxとの間に違いはありません。ただし、関数呼び出しを行っているため、呼び出すと余分なオーバーヘッドが発生します。これを実証するための簡単なテストを次に示します。bool(x)ifbool()

In [7]: %timeit if(''): pass
10000000 loops, best of 3: 21.5 ns per loop

In [8]: %timeit if(bool('')): pass
1000000 loops, best of 3: 235 ns per loop
于 2012-08-09T14:14:16.817 に答える
8

if真の値をテストするとき__nonzero__()と同様に、利用可能な場合は使用します。bool()はい、動作は同等です

ドキュメントから:

ブール演算のコンテキストで、また制御フロー ステートメントで式が使用される場合、次の値は false として解釈されます: False、None、すべての型の数値ゼロ、および空の文字列とコンテナー (文字列、タプル、リスト、辞書を含む) 、セット、およびフリーズセット)。他のすべての値は true として解釈されます。( __nonzero__()これを変更する方法については、特別な方法を参照してください。)

object.__nonzero__(self)

真理値テストを実装するために呼び出され、組み込み操作bool();は False または True、またはそれらに相当する整数 0 または 1 を返す必要があります__len__()。は非ゼロです。__len__()クラスで もも定義されていない場合、 __nonzero__()そのすべてのインスタンスが true と見なされます。

于 2012-08-09T14:22:55.053 に答える
3

ステートメントに入力したオブジェクトは、if内部のpythonチェッカーに基づいてブール値に変換されます。通常は問題ではありません。ステートメント内とステートメントの間bool(x)に違いはありません。(x)if

ただし、その理由bool(x)は次のような場合にあります。

return bool(x)

オブジェクトに基づいて「trueまたは」を返します。false

于 2012-08-09T14:15:50.247 に答える
0

x が ''、None、0、または False の場合、違いはありません。False に変換されます。

于 2012-08-09T14:17:30.200 に答える