所有這些在技術上都是不同的。
例1
假設你有一個函數調用不返回任何有意義的東西,如下:
def fun(x=None):
return x
現在,爲你的while循環,所有這些都將被定義爲如下:
def while1():
flag = False
while flag == False:
flag = fun(None)
def while2():
flag = False
while flag is False:
flag = fun(None)
def while3():
flag = False
while not flag:
flag = fun(None)
在這種情況下,只有while1
和while2
將終止。由於bool(None)
的計算結果爲False
,因此while3
將無限延續,但由於None != False
和None is not False
,while1
和while2
都將終止。
現在,通過更復雜的例子,這會變得更有趣。
例2
def fun(x):
return x
現在,對於我們每一個循環的,我們要改變flag = fun()
到flag = fun(0)
。
在這種情況下,while1
和while3
終止,而while2
無限期地繼續。這是因爲bool(0) == False
和0 == False
,但0 is not False
。
例3 - Mutables
現在,這得到了很多更加複雜與mutables,這就是爲什麼明確與隱含的依賴局面的情況。可變數是可以修改的任何對象,幷包括字典,列表。不可變的對象是任何不能被修改的東西,比如元組,浮點數,浮點數,strs。
說我有以下幾點:
a = []
b = []
在這種情況下,bool(a) == False
和a == b
,但a is not b
。簡而言之,如何檢查虛僞或真實的價值觀並不存在,簡單而堅定的規則。
但是,有一般規則。
通則
檢查無與其他來源 如果你接受比無其他任何值,檢查x is None
。
檢查mutables 切勿使用x is b
,因爲mutables可以有不同的ID,除非你明確要檢查使用相同的ID(id(x) == id(b)
的對象。 通常情況下,檢查not x
或x == b
>>> a = []
>>> b = []
>>> a is b
False
>>> a == b
True
>>> not a
True
檢查strs,浮動和整數 對於strs,浮動和整數,總是檢查x == b
而不是x is b
。這是因爲對於短strs,浮動,如果是x == b
,結果可能爲真,但對於更復雜的情況,您的代碼將停止工作。
例如:
>>> a = 1
>>> a is 1
True
>>> a = 10000000
>>> a is 10000000
False
檢查布爾
對於布爾值,可以執行任何上述的,但not x
優選x == b
或x is b
。
最後... While循環
如果可以的話,總是一個while循環轉換爲一個循環。這並不總是可能的,但說你想要做一個簡單的例子:
x = 0
while x < 10:
print(x)
x -= 1
這可以轉換爲:
for x in range(10):
print(x)
之所以使用for循環而不是while循環是,如果某個錯誤發生在你的代碼中,while循環可能導致無限循環並導致你的程序崩潰,而for循環總是會退出。
如果你想使你的意圖在while循環的條件明確,我想創建一個'didnt_break_yet =拉姆達:TRUE'和使用它像'而didnt_break_yet():#做something'。通過這種方式,您可以清楚地知道,循環*無意運行無限長* – WorldSEnder
如果您有多個選項可供選擇,無論您的個人偏好是什麼,都可以使用代碼上下文中的任何作品。 –