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 中,使...