Python生成器 迭代器 裝飾器

2021-07-27 21:54:24 字數 1464 閱讀 5910

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):

print n

在迴圈過程中不斷呼叫yield,就會不斷中斷,通常基本不用next()來呼叫,而是直接使用for迴圈。

迭代器是乙個next()方法的物件,而不是通過索引來計數。

建立迭代器:對乙個物件呼叫iter()函式就可以得到它的迭代器,它的語法如下:

iter(obj)

iter(func,sentinel)

mytuple=(1,2,3)

i=iter(mytuple)

print i.next()

print i.next()

print i.next()

字典的迭代器會遍歷它的鍵(key),一種比較簡潔的方法如下:

legends = 

for i in legends:

print i

print legends[i]

檔案物件生成的迭代器會自動呼叫readline()方法,一種簡潔的實現方法如下:

myfile = open('a.txt')

for eachline in myfile:

print eachline

基本概念:在函式呼叫前後自動列印日誌,又不改變原函式,在**執行期間動態增加功能的方式稱之為「裝飾器」。

裝飾器的語法已@開頭,接下來是裝飾器函式的名字和可選的引數,緊跟著裝飾器宣告的是被修飾的函式和裝飾函式的可選引數。

decorator(dec_opt_args)

def func2bdecorated(func_opt_args):

比較常用的地方:

1、引入日誌

2、增加計時邏輯來檢測效能

3、給函式加入事務的能力

def

log(func):

def(*args, **kw):

print

'call %s():' % func.__name__

return func(*args, **kw)

@log

defnow

():print

'2013-12-25'

python 裝飾器,生成器,迭代器

示例1 無參無返回值 def shuai func 示例2 帶參函式的裝飾器 帶參函式的裝飾器 示例3 帶參有返回值的裝飾器 def zhuangshiqi func 資料量非常小,記憶體占用不大 l i for i in range 10 資料量特別大時,會造成記憶體占用突然增大 l2 i for...

Python裝飾器,迭代器,生成器

1.python裝飾器 由於函式也是乙個物件,而且函式物件可以被賦值給變數,所以,通過變數也能呼叫該函式。所有函式都有乙個 name 屬性,這樣我們就可以那到函式名。現在,假設我們要增強now 函式的功能,比如,在函式呼叫前後自動列印日誌,但又不希望修改now 函式的定義,這種在 執行期間動態增加功...

Python生成器,迭代器,裝飾器

使用了yield函式就被稱之為生成器,生成器是乙個返回迭代器的函式,說白了生成器就是迭代器,只能用於迭代操作 不懂,沒關係,下面就乙個斐波那契數列為例來進行講解 a,b 0,1while a 100 a,b b,a b print a import sys deffibonacci n 生成迭代器函...