[英]Check string “None” or “not” in Python 2.7
想知道如果if not foo is None
與if foo
相同嗎? 使用Python 2.7和foo
是一個字符串。
對於空字符串,兩者都不同:
foo = ''
if foo:
print 'if foo is True'
不會打印任何東西,因為它是空的 ,因此被認為是False
但是:
if foo is not None:
print 'if not foo is None is True'
將打印因為foo
不是None !
我根據PEP8更改了它。 if foo is not None
則相當於你的if not foo is None
但更可讀,因此PEP8推薦。
if a is None:
pass
if
明確設置a = None
則if
將僅為True
。
另一方面:
if a:
pass
有多種方法可以評估它何時為True
:
Python嘗試調用a.__bool__
,如果實現了這個,則使用返回的值。
None
, False
, 0.0
, 0
將評估為False
,因為他們__bool__
方法返回False
。 如果沒有實現a.__bool__
那么它會檢查a.__len__.__bool__
返回什么。
''
, []
, set()
, dict()
等將評估為False
因為它們的__len__
方法返回0
。 這是False
因為bool(0)
是False
。 如果沒有實現a.__len__
那么只返回True
。
True
。 另請參閱:python文檔中的真值測試 。
不,當foo是空字符串時不一樣。
In [1]: foo = ''
In [2]: if foo:
...: print 1
...:
In [3]: if foo is None:
...: print 2
...:
In [4]: if not foo is None:
...: print 3
...:
3
運算符is
比較ID(您可以檢查具有id(something)
)。 因為只有一個None
實例,所以表單中的任何表達式something is None
都將為False
除非None is None
或者something == None
。 運營商not
具有比比較少的優先級 (並且is
在一個比較操作),這樣的結果not string is None
這是一樣的not (string is None)
始終是True
。
然而,如果字符串對象不是空字符串,則該字符串對象被視為True
如果是空字符串,則視為False
。
因此,其中一個表達式總是為True
而另一個表達式可以變化,所以不,它們不等同。
不。試試這個代碼
foo=''
if foo:
print (1)
else:
print (2)
if not foo is None:
print (3)
else:
print (4)
它會打印出來
2
3
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.