1. 程式人生 > >python學習第十三天:帶參數裝飾器和叠代器

python學習第十三天:帶參數裝飾器和叠代器

true ron next __iter__ Go 方便 裝飾 節省空間 ext

帶參數的裝飾器:就是在原裝飾器外再包一層函數

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學習第十三天:帶參數裝飾器和叠代器