python學習第十三天:帶參數裝飾器和叠代器
帶參數的裝飾器:就是在原裝飾器外再包一層函數
def auth(driver=‘file‘): def auth2(func): def wrapper(*args,**kwargs): name=input("user: ") pwd=input("pwd: ") if driver == ‘file‘: if name == ‘egon‘ and pwd == ‘123‘: print(‘login successful‘) res=func(*args,**kwargs) return res elif driver == ‘ldap‘: print(‘ldap‘) return wrapper return auth2
@auth(driver=‘file‘) def foo(name): print(name) foo(‘egon‘)
叠代器:叠代取值的工具
1.是叠代器?
叠代是一個重復的過程,每一次重復都是基於上一個結果而來的。
註:單純的重復並不是叠代
2.為什麽要有叠代器?
基於索引的叠代取值方式只適合用於列表、元組、字符串類型,而對於沒有索引的字典、集合、文件,則不再適用。
所以必須找到一種不依賴於索引取值的方式,這就是叠代器
叠代器適用於可叠代對象
3.什麽是可叠代對象?
在python中但凡內置有__iter__方法的對象都是可叠代對象
可叠代對象包含:字符串,列表,元組,字典,集合和文件
4.什麽是叠代器對象?
叠代器對象指的是內置有__iter__方法,又內置有__next__方法的對象
執行可叠代對象的__iter__方法得到的就是內置的叠代器對象
文件本身就是叠代器對象
叠代器對象的__iter__方法得到的是叠代器本身,為了方便for循環
叠代器對象的__next__方法得到的是下一個值
一旦叠代器取幹凈了,再繼續取就會拋出StopIteration
5.for循環:
For循環的本質是叠代器循環
Info = [1,2,3,4]
for k in info:
print(k)
in後面跟的一定是可叠代對象,for循環的in會自動把可叠代對象轉換為叠代器對象
總結:
優點:1.提供了一種通用的,可以不依賴索引的叠代取值方式
2.叠代器對象更加節省空間
缺點:1.叠代器的取值不如索引和key靈活,只能一個個往後取
2.無法預測叠代器值的個數
python學習第十三天:帶參數裝飾器和叠代器