四.Python迭代器產生器和裝飾器

來源:互聯網
上載者:User

標籤:迭代   ext   lis   元素   執行   資訊   iterable   yield   調用   

迭代器

迭代是Python最強大的功能之一,是訪問集合元素的一種方式。

迭代器是一個可以記住遍曆的位置的對象。

迭代器對象從集合的第一個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退。

凡是可作用於for迴圈的對象都是Iterable類型;

凡是可作用於next()函數的對象都是Iterator類型,它們表示一個惰性計算的序列;

集合資料類型如listdictstr等是Iterable但不是Iterator,不過可以通過iter()函數獲得一個Iterator對象。

Python的for迴圈本質上就是通過不斷調用next()函數實現的。

list=[1,2,3,4]>>> it = iter(list)    # 建立迭代器對象>>> print (next(it))   # 輸出迭代器的下一個元素1>>> print (next(it))2>>>

 

產生器

在 Python 中,使用了 yield 的函數被稱為產生器(generator)。

跟普通函數不同的是,產生器是一個返回迭代器的函數,只能用於迭代操作,更簡單點理解產生器就是一個迭代器。

在調用產生器啟動並執行過程中,每次遇到 yield 時函數會暫停並儲存當前所有的運行資訊,返回 yield 的值, 並在下一次執行 next() 方法時從當前位置繼續運行。

調用一個產生器函數,返回的是一個迭代器對象。

def fib(max):    n=0    a=0    b=1    while max>n:       yield b       a,b=b,a+b       n=n+1f=fib(10)for i in f:    print(i)

 

裝飾器

裝飾器: 本質是函數, 用於裝飾其他函數, 附加一些本身所沒有的功能

原則:1.不能修改被裝飾的函數的原始碼

           2.不能修改被裝飾的函數的調用方式

import timedef bar():    time.sleep(3)    print(‘in the bar‘)def test1(func):    start_time=time.time()    func()    #run bar    stop_time=time.time()    print("the func run time is %s" %(stop_time-start_time))test1(bar)bar()

 

四.Python迭代器產生器和裝飾器

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.