簡體   English   中英

在Python 2.7中檢查字符串“None”或“not”

[英]Check string “None” or “not” in Python 2.7

想知道如果if not foo is Noneif 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推薦。


更多關於Python中的一般原則:

if a is None:
    pass

if明確設置a = Noneif將僅為True

另一方面:

if a:
    pass

有多種方法可以評估它何時為True

  1. Python嘗試調用a.__bool__ ,如果實現了這個,則使用返回的值。

    • 所以NoneFalse0.00將評估為False ,因為他們__bool__方法返回False
  2. 如果沒有實現a.__bool__那么它會檢查a.__len__.__bool__返回什么。

    • ''[]set()dict()等將評估為False因為它們的__len__方法返回0 這是False因為bool(0)False
  3. 如果沒有實現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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM