Python產生器、迭代器、裝飾器

來源:互聯網
上載者:User

標籤:

Python迭代器

迭代器是訪問集合內元素的一種方式。迭代器對象從集合的第一個元素開始訪問,直到所有的元素都被訪問一遍後結束。

迭代器不能回退,只能往前進行迭代。這並不是什麼很大的缺點,因為人們幾乎不需要在迭代途中進行後援動作。

常用的迭代方法有

.next()方法

for..in..方法

迭代器通俗的理解就是遍曆集合內的所有元素

 

python產生器

這裡先說簡單的使用,然後再說自己建立產生器

range:產生一個list

range(1,5)
結果為:[1,2,3,4]

xrange:產生一個xrange的對象

xrange(5)
結果為:xrange(5)
list(xrange(1,5))
結果為:[1,2,3,4]
list(xrange(1,5,2))
結果為:[1,3]

range與xrange的不同在於range或直接產生整個序列,而xrange則是逐漸返回,迭代時返回。當需要迭代的數目過大,或者有中斷時,使用xrange既能減少記憶體的使用,又能提高效率

 

python中含有yield的函數就是一個產生器(可能性很大)

yield其實和return差不多,只不過返回的是一個產生器

定義一個產生器

def nub():
  nub = range(1,5)
  for i in nub:
    yield i*i

可以利用type()查看函數nub的類型,在迭代(可使用next())的時候函數才會運行,而且函數每次運行後都會保持上一次啟動並執行狀態,當迭代結束的時候會報錯

 

Python裝飾器

裝飾器是一個很著名的設計模式,經常被用於有切面需求的情境,較為經典的有插入日誌、效能測試、交易處理等。裝飾器是解決這類問題的絕佳設計,有了裝飾器,我們就可以抽離出大量函數中與函數功能本身無關的雷同代碼並繼續重用。概括的講,裝飾器的作用就是為已經存在的對象添加額外的功能。

摘用一下別人的代碼

#-*- coding: UTF-8 -*-import time def foo():    print ‘in foo()‘ # 定義一個計時器,傳入一個,並返回另一個附加了計時功能的方法def timeit(func):         # 定義一個內嵌的封裝函數,給傳入的函數加上計時功能的封裝    def wrapper():        start = time.clock()        func()        end =time.clock()        print ‘used:‘, end - start         # 將封裝後的函數返回    return wrapper foo = timeit(foo)foo()

函數foo被函數timeit裝飾

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.