python基礎之帶參數裝飾器和迭代器

帶參數的裝飾器:就是在原裝飾器外再包一層函數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.沒法預測迭代器值的個數

相關文章
相關標籤/搜索