這個系列主要是文檔與自己的用法之間的出入的反思,以后不光需要多練,仍需要更多的反思
More Control Flow Tools
- 如果在循環(huán)當(dāng)中對序列進(jìn)行修改,不會報錯,但是肯定會有各種各樣的問題
建議: for循環(huán)的序列應(yīng)該是原序列的copy,推薦用[:]來復(fù)制,這樣易讀性更佳
>>> for w in words[:]: # Loop over a slice copy of the entire list.
... if len(w) > 6:
... words.insert(0, w)
...
>>> words
['defenestrate', 'cat', 'window', 'defenestrate']
- py3中,range直接返回的就是迭代對象
- 循環(huán)語句當(dāng)中也可以有else子句,用在循環(huán)迭代結(jié)束之后
>>> for n in range(2, 10):
... for x in range(2, n):
... if n % x == 0:
... print(n, 'equals', x, '*', n//x)
... break
... else:
... # loop fell through without finding a factor
... print(n, 'is a prime number')
...
2 is a prime number
3 is a prime number
4 equals 2 * 2
5 is a prime number
6 equals 2 * 3
7 is a prime number
8 equals 2 * 4
9 equals 3 * 3
pass語句的用處
占位符,最小類,while truefor vs while
個人認(rèn)為對象是個序列的時候用for
其他數(shù)據(jù)結(jié)構(gòu)算法時while用的比較多
以可讀性為準(zhǔn)如果一直執(zhí)行到整個函數(shù)結(jié)束還沒有碰到 return 語句,也返回 None。
函數(shù)的默認(rèn)值只計算一次
i = 5
def f(arg=i):
print(arg)
i = 6
f()
- 函數(shù)的默認(rèn)值是個可變對象的時候,推薦這樣寫
def f(a, L=None):
if L is None:
L = []
L.append(a)
return L
- 關(guān)鍵字參數(shù)必須寫在位置參數(shù)之后
- (name必須出現(xiàn)在*name之前)
- 學(xué)會使用文檔字符串
>>> def my_function():
... """Do nothing, but document it.
...
... No, really, it doesn't do anything.
... """
... pass
...
>>> print(my_function.__doc__)
Do nothing, but document it.
No, really, it doesn't do anything.
- 實際項目中多使用lambda
dt2str = lambda dt: dt.strftime('%Y-%m-%d %H:%S:%M') - 學(xué)會是用函數(shù)的文檔
my_function.__doc__