python 15 生成器2位元組串和位元組陣列

2021-09-24 15:50:12 字數 2925 閱讀 6685

迭代器 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 來隨時終止生...