今天開始讀《python-cookbook》,書裡有許多python優雅的寫法,可以作為python的一本高階書。
以下是我個人的一些筆記
1、遞迴並不是python擅長的
2、關於生成器(generator)
乙個函式中需要有乙個yield
語句即可將其轉換為乙個生成器。 跟普通函式不同的是,生成器只能用於迭代操作。
#使用生成器
deffrange(start, stop, increment):
x =start
while x yield
x x +=increment
#普通函式
defnrange(start, stop, increment):
x =start
arr=
while x x +=increment
return
arrfor i in frange(1,5,0.7):
(i)for i in nrange(1,5,0.7):
print(i)
可以看到兩個函式用法、輸出都一樣,但是實現方式完全不同。顯然用到生成器函式更加優雅
乙個生成器函式主要特徵是它只會回應在迭代中使用到的 next 操作,next操作讓函式執行到yeild,就返回後面的值為止。然後繼續next,直到生成器函式返回退出,迭代終止。因此最後乙個next會捕獲乙個異常
3、collections.deque雙端佇列。
使用deque(maxlen=n)
建構函式會新建乙個固定大小的佇列。當新的元素加入並且這個佇列已滿的時候, 最老的元素會自動被移除掉。
在佇列兩端插入或刪除元素時間複雜度都是o(1)
,區別於列表,在列表的開頭插入或刪除元素的時間複雜度為o(n)
。
Python Cookbook學習記錄
4.迭代器和生成器 4.9迭代所有可能的組合和排列 import itertools items a b c permutations 接受乙個元素集合,將其中的元素重排列為所有可能的情況,並以元組形式返回 for p in itertools.permutations items print p ...
python cookbook學習筆記十一
csv檔案讀取 csv檔案格式如下 分別有2行三列。訪問 如下 f open r e py prj test.csv rb f csv csv.reader f forf inf csv printf 在這裡f是乙個元組,為了訪問某個字段,需要用索引來訪問對應的值,如f 0 訪問的是first,f ...
每天學點Python Cookbook(四)
任務 尋找上乙個星期五的日期。解決方案 通過python標準庫的datetime模組,可以快速完成此任務。import datetime,calendar def find last friday last friday datetime.date.today oneday datetime.tim...