帶參數的裝飾器:就是在原裝飾器外再包一層函數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')
迭代器:迭代取值的工具app
1.是迭代器?函數
迭代是一個重複的過程,每一次重複都是基於上一個結果而來的。工具
注:單純的重複並非迭代對象
2.爲何要有迭代器?blog
基於索引的迭代取值方式只適合用於列表、元組、字符串類型,而對於沒有索引的字典、集合、文件,則再也不適用。索引
因此必須找到一種不依賴於索引取值的方式,這就是迭代器字符串
迭代器適用於可迭代對象input
3.什麼是可迭代對象?it
在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.沒法預測迭代器值的個數