三、生成器
四、 裝飾器
迭代是python的強大功能之一,是訪問集合元素的一種方式。
迭代器是乙個可以記住遍歷位置的物件,,在遍歷字串、列表、或者元組的時候非常有用。
生成器是函式中包含yield語句的一類特殊函式。
裝飾器的靈活性很強,可以為乙個物件新增新的功能,或者給函式插入相關的功能。
給定乙個list或者tuple,可以通過for迴圈來遍歷這個list或者tuple,這種遍歷稱為迭代(iteration),被遍歷的list或者tuple稱為可迭代物件。除了list或者tuple外,還有str,set,tuple 等作為迭代物件。
迭代器是乙個可以記住遍歷位置的物件。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。
迭代器有兩個基本方法:iter()和 next()。其中iter( )方法用來建立迭代器物件;next()用來遍歷物件的元素。在遍歷字串、列表或元組物件時,經常會用到迭代器。
list=[
1,2,
3,4,
5]x =iter
(list
)#建立迭代器物件
print
(next
(x))
print
(next
(x))
print
(next
(x))
print
(next
(x))
print
(next
(x))
e:\anconda\python.exe "c:/users/mr-li/desktop/program practice/1.py"12
345
也可以用for迴圈來進行遍歷:
list=[
1,2,
3,4,
5]x =iter
(list
)for i in x:
print
(i,end=
' ')
e:\anconda\python.exe "c:/users/mr-li/desktop/program practice/1.py"12
345 process finished with exit code 0
使用生成器可以生成乙個值的序列用於迭代,並且這個值得序列不是一次生成的,而是使用乙個在生成乙個,可以使程式節約大量記憶體。
在python中,使用了yield的函式被稱為生成器,與普通函式不同的是,生成器將返回乙個迭代器的函式,並且生成器只能用於迭代操作。可見,生成器是一種特殊的迭代器。
在呼叫生成器執行的過程中,每次遇到yield時,函式就會暫停,並儲存當前所有的執行資訊,返回yield的值,在下一次執行next( )方法時,會從當前位置繼續執行。
list=[
[1,2
],[3
,4],
[5,6
],[7
,8]]
#建立乙個巢狀列表
defxunhuan
(list):
#建立生成器
for aa in
list
:for bb in aa:
yield bb
#與 return 返回值不同的是,yield語句沒產生乙個值,函式就會暫停,返回yield值,等待被重新喚醒後從當前位置繼續執行。
for nn in xunhuan(
list):
print
(nn,end=「 」)
e:\anconda\python.exe "c:/users/mr-li/desktop/program practice/1.py"12
3456
78 process finished with exit code 0
裝飾器是一種增加函式或類的功能的方法,可以快速的給不同的函式或者類插入相同的功能。
當寫了乙個很長的函式後,發現還需要新增一些功能。更改會耗時很長,通過裝飾器就可以輕鬆解決問題。
可以參考這個裝飾器解釋
python迭代器生成器和裝飾器
7.迭代器和生成器區別 迭代器是乙個抽象概念,任何物件,它的next方法和iter方法返回自己本身。iter是內建函式,iter 會返回乙個定義了next方法的迭代器物件,class mynumbers defiter self self.a 1 return self defnext self x...
Python生成器 迭代器 裝飾器
python生成器 迭代器 裝飾器 最簡單的生成器 g x x for x in range 10 for i in g print i函式方法實現稍複雜的生成器 def fib max n,a,b 0,1,1 while nyield b a,b b,a b n 1 for n in fib 6 ...
python 裝飾器,生成器,迭代器
示例1 無參無返回值 def shuai func 示例2 帶參函式的裝飾器 帶參函式的裝飾器 示例3 帶參有返回值的裝飾器 def zhuangshiqi func 資料量非常小,記憶體占用不大 l i for i in range 10 資料量特別大時,會造成記憶體占用突然增大 l2 i for...