迭代器 iterator
iter(可迭代物件) 返回的是迭代器
next(迭代器) 從可迭代物件中取值
在沒有資料時會觸發stopiteration異常
生器函式說明:
生成器函式呼叫將返回乙個生成器物件,生成器物件是可迭代物件
在生成器函式內呼叫return語句會觸發乙個 stopiteration 異常(即生成資料結束)
練習:寫乙個生成器函式 myeven(start, stop) 用來生成從start開始到stop結束區間內的一系列偶數(不包含stop)
如:
def myeven(start, stop):… # 此處自己實現
evens = list(myeven(10, 20))
print(evens) # [10, 12, 14, 16, 18]
for x in myeven(5, 10):
print(x) # 6 8
l = [x for x in myeven(0, 10)]
print(l) # [0, 2, 4, 6, 8]
生成器表示式:
gen = (x ** 2 for x in range(1, 5))it = iter(gen)
next(it) # 1
next(it) # 4
next(it) # 9
next(it) # 16
next(it) # stopiteration
# 第一段程式l = [2, 3, 5, 7]
l2 = [x * 10 for x in l]
it = iter(l2)
print(next(it)) # 20
l[1] = 30
print(next(it)) # 30
# 第二段程式回顧:l = [2, 3, 5, 7]
l2 = (x * 10 for x in l) # <-此處已修改
it = iter(l2)
print(next(it)) # 20
l[1] = 30
print(next(it)) # 300
序列:列表,元組,字串,位元組串,位元組陣列
位元組串(也叫位元組序列) bytes
作用:儲存以位元組為單位的資料
說明:位元組串是不可改變的序列
能用於位元組串和位元組陣列的函式:
len(x), max(x), min(x), sum(x), any(x), all(x)
bytes 和 str 的區別
bytes 儲存位元組(位元組是0~255的整數)
str 儲存unicode字元(字元是0~65536的整數)
bytes 與 str 轉換
編碼(encode)
str ----------> bytes
b = s.encode(encoding=『utf-8』)
解碼(decode)
bytes ---------> str
s = b.decode(encoding=『utf-8』)
示例:s = 『我是中文』
b = s.encode(『utf-8』)
s2 = b.decode(『utf-8』)
位元組陣列 bytearray
可變的位元組序列
位元組陣列的建構函式 bytearray
bytearray() 生成乙個空的位元組陣列
bytearray(整型可迭代物件) # 用可迭代物件初始化乙個位元組陣列
bytearray(整數n) 生成n個值為0的位元組陣列
bytearray(字串, encoding=『utf-8』) 用字串的轉換編碼生成乙個位元組陣列
運算:運算規則同序列完全相同
+ += * *=
< <= > >= == !=
in / not in
索引 / 切片
位元組陣列支援索引和切片的賦值操作,規則同列表的賦值規則完全相同
練習:有乙個bytearray位元組陣列
ba = bytearray(b』a1b2c3d4』)
如何得到位元組串b』1234』和 b』abcd』
將上述位元組陣列改為:
ba = bytearray(b』a1b2c3d4』)
答案:ba = bytearray(b』a1b2c3d4』)
b1 = ba[1::2] #b1=bytearray(b』1234』)
b1 = bytes(b1) # b1 = b』1234』
b2 = ba[::2] # b2=bytearray(b』1234』)
b2 = bytes(b1) # b2 = b』1234』
ba[::2] = range(65, 69)
練習:列印 9 x 9 乘法表:
1x1=1
1x2=2 2x2=4
1x3=3 2x3=6 3x3=9
…1x9=9 … 9x9=81
寫乙個生成器函式 myxrange(start, stop, step) 來生成一系列整數
要求功能與range完全相同
不允許呼叫range函式和列表
然後用自己寫的myxrange函式求 1 ~ 100內奇數的平方和
寫乙個myfilter生成器函式,功能與filter函式功能完全相同
如:def myfilter(fn, iter1):
…l = [x for x in myfilter(
lambda x: x%2, range(10)
)] # l = [1, 3, 5, 7, 9]
將以前所有練習自己不看之前的**重寫一遍
python3生成器 Python3 生成器
python3 生成器 閱讀 125 發布於 2020 05 19 14 29 25 在python中,一邊迴圈一邊計算出元素的機制,稱為生成器 generator。生成器的優點 一次返回乙個結果,延遲計算。這對於大資料量處理,是個非常有用的優勢。占用記憶體量是工程師必須考慮的乙個問題。提高 可讀性...
Python(九)生成器
該系列文章用來記錄一下自己在b站學習python時,進行上機練習用的 使用 pycharm 2020.3.3 慕課 python語言基礎與應用 北京大學 陳斌 字幕校對 編寫程式,輸入兩個數,輸出它們的商,採用例外處理來處理兩種錯誤,給出使用者友好的提示資訊 1 除數為0 2 輸入了非數值 try ...
Python筆記003 生成器和生成器表示式
以下是我學習 流暢的python 後的個人筆記,現在拿出來和大家共享,希望能幫到各位python學習者。生成器使用yield做關鍵字,一次只返回乙個值給呼叫者,然後暫停執行,其作用是 節省記憶體空間。生成器可以用next 函式,也可以用for迭代的方式獲取元素值,中間還可以用close 來隨時終止生...