21

Python コンソールで:

>>> a = 0
>>> if a:
...   print "L"
... 
>>> a = 1
>>> if a:
...   print "L"
... 
L
>>> a = 2
>>> if a:
...   print "L"
... 
L

なぜこれが起こるのですか?

4

5 に答える 5

29

Python では、boolは のサブクラスでありintFalse値は0; です。ステートメントで値が暗黙的にキャストされていない場合でもbool(そうです)、真です。ifFalse == 0

于 2012-09-19T15:04:52.943 に答える
14

0 は Python の偽の値です

偽りの値: (2.7) ドキュメントから:

0、0L、0.0、0j など、任意の数値型のゼロ。

于 2012-09-19T14:49:49.007 に答える
7

句の内部にあるものはすべて、if暗黙的boolにそれを呼び出しています。そう、

if 1:
   ...

本当に:

if bool(1):
   ...

オブジェクトがorであるかどうかを示す1bool呼び出します__nonzero__TrueFalse

デモ:

class foo(object):
    def __init__(self,val):
        self.val = val
    def __nonzero__(self):
        print "here"
        return bool(self.val)

a = foo(1)
bool(a)  #prints "here"
if a:    #prints "here"
    print "L"  #prints "L" since bool(1) is True.

__bool__python3.x では1

于 2012-09-19T14:51:32.957 に答える
0

0か0でないかで判断するだけだと思います:

>>> if 0:
    print 'aa'

>>> if not 0:
    print 'aa'


aa
>>> 
于 2012-09-19T17:00:21.543 に答える