17
if <boolean> :
   # do this

boolean は True または False でなければなりません。

それでなんで

if "poi":
   print "yes"

出力: はい

「poi」はTrueまたはFalseではないため、 yes がprintingである理由がわかりませんでした。

4

3 に答える 3

29

式からブール値が必要な場合、Python は式の「真実性」を評価するために最善を尽くします。

文字列の規則では、空の文字列が考慮されFalse、空でない文字列が考慮されTrueます。他のコンテナにも同じルールが適用されるため、空の辞書またはリストが考慮されFalse、1 つ以上のエントリを持つ辞書またはリストが考慮されTrueます。

Noneオブジェクトも false と見なされます。

の数値0は false と見なされます (文字列値の'0'は true と見なされます)。

他のすべての式が考慮されTrueます。

詳細 (ユーザー定義型が真偽を指定する方法を含む) は、http: //docs.python.org/release/2.5.2/lib/truth.htmlにあります。

于 2013-08-28T15:14:40.877 に答える
10

Python では、空の文字列を除くすべての文字列のデフォルトはTrue

つまり、

if "MyString":
    # this will print foo
    print("foo")

if "":
    # this will NOT print foo
    print("foo")
于 2013-08-28T15:12:45.583 に答える
9

ここで起こっているのは、Python の暗黙的bool()コンストラクターifの,の後の補足ですif。このコンテキストでは、コードは次と同等です

if bool("hello"):
   print "yes"

Pythonコンストラクターによるとbool(x)、何でも受け入れ、以下のケースに基づいて真実性を決定します

  • x が整数の場合、それ以外0FalseすべてTrue
  • x が float の場合、それ以外0.0Falseすべて True です`
  • x がリストの場合、それ以外[]FalseすべてTrue
  • x が set/dict の場合、それ以外{}FalseすべてTrue
  • x がタプルの場合、それ以外()FalseすべてTrue
  • x が文字列の場合、それ以外“"Falseすべて のみ ですTruebool(“False”)に戻ることに注意してくださいTrue

上記のケースのログは次のとおりです

Python 3.4.3 (default, Feb 25 2015, 21:28:45) 
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.56)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> bool(0)
False
>>> bool(1)
True
>>> bool(-1)
True
>>> bool(0.0)
False
>>> bool(0.02)
True
>>> bool(-0.10)
True
>>> bool([])
False
>>> bool([1,2])
True
>>> bool(())
False
>>> bool(("Hello","World"))
True
>>> bool({})
False
>>> bool({1,2,3})
True
>>> bool({1:"One", 2:"Two"})
True
>>> bool("")
False
>>> bool("Hello")
True
>>> bool("False")
True
于 2015-03-03T07:01:17.687 に答える