簡述Python中的迭代器 生成器和裝飾器

2021-10-08 03:39:59 字數 1945 閱讀 2602

1、先來了解一下可迭代物件:

可以直接作用於for迴圈的物件統稱為可迭代物件,即iterable

2、什麼是迭代器

內部實現了iter()方法和next()方法的物件就是迭代器

總結:

- 凡是可作用於for迴圈的物件都是iterable型別;

- 凡是可作用於next()函式的物件都是iterator型別;

- list,dict,str雖然是iterable,卻不是iterator。

我們常說的生成器,就是帶有 yield 的函式

生成器建立方式兩種:

1、s =

(x*2

for x in

range(5

))

# 菲波那切數列

deffib

(n):

print

("-----start-----"

) a, b =0,

1for i in

range

(n):

yield b

a, b = b, a + b

print

("-----end-------"

)f = fib(8)

while

true

:try

: x =

next

(f)print

("f:"

, x)

except stopiteration as e:

print

("生成器最後的返回值是:"

, e.value)

break

生成器對延遲操作提供了支援,所謂延遲操作,不是立刻產生結果,是在需要時才產生結果。

裝飾器本質就是乙個函式;

裝飾器可以使其他函式在不改變任何**的前提下增加額外功能。

裝飾器應用場景有很多,比如驗證登入、列印日誌、記錄程式執行時間等。

例項1:驗證登入

import functools

defcheck_login

(func)

:"""

在這裡從新定義乙個高階函式,這就是decorator。

"""# 加入@functools.wraps(func) 可以保證裝飾器不會對被裝飾函式造成影響。

@functools.wraps(func)

def(

*args,

**kwargs)

: user =

"admin"

# 假設這是資料庫中的使用者名稱和密碼

passwd =

"123"

username =

input

("輸入使用者名稱:"

) password =

input

("輸入密碼:"

)if username == user and password == passwd:

return func(

*args,

**kwargs)

else

:print

("使用者名稱或密碼錯誤。"

)# 利用python的@語法,把decorator置於home函式的定義處 相當於home = check_login(home)

@check_login

defhome()

:print

("歡迎來到xx首頁!"

)home(

)

簡述Python中的迭代器和生成器

才疏學淺,歡迎建議 至於為什麼要返回迭代器呢,因為在遍歷的時候,會呼叫next 不斷的找下乙個值,而next 方法會呼叫物件的 next 下面直接說生成器的使用,解釋再多不如一段 生成器函式def 簡單介紹一下這個生成器,如果使用正常的函式,想要達到這種效果,需要在定義乙個list 而只要定義lis...

簡述Python迭代器

物件必須提供乙個next方法,執行方法要麼返回迭代器的下一項,要麼就引起乙個stopiteration異常,以終止迭代。協議是一種約定,可迭代物件實現了迭代器協議,python的內部工具 如for迴圈,sum min max函式等 使用迭代器協議訪問物件。實現了迭代器協議的物件叫可迭代物件,滿足以下...

迭代器與生成器(python)簡述

迭代是python最強大的功能之一,是訪問集合元素的一種方式。迭代器是乙個可以記住遍歷的位置的物件。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退。迭代器有兩個基本的方法 iter 和next 字串,列表或元組物件都可用於建立迭代器 在 python 中,使...