【筆記】python的裝飾器,迭代器,生成器(yield)

裝飾器:

 

不改變home的源碼,給它加上添加登錄功能呢

            寫在 被裝飾函數 的 正上方 。可提前註明接下來介紹內容

            比如:@property、@classmethod、@staticmethod 、

      @關鍵字

      被裝飾函數()

def login(func):
    """
    在這裏從新定義一個高階函數,
    這就是decorator。
    我們一會兒會仔細分析。
    """
    def wrapper(*args, **kwargs):
        user = "zingp"   # 假設這是數據庫中的用戶名和密碼
        passwd = "123"
        username = input("輸入用戶名:")
        password = input("輸入密碼:")
        if username == user and password == passwd:
            return func(*args, **kwargs)
        else:
            print("用戶名或密碼錯誤。")
    return wrapper


@login     # 利用python的@語法,把decorator置於home函數的定義處 相當於home = login(home)
def home():
    print("歡迎來到XX首頁!")

home()

 

 

迭代器 (Iterator)

迭代器的特點:訪問者不需要關心迭代器內部的結構,僅需通過next()方法不斷去取下一個內容,不能隨機訪問集合中的某個值,只能從頭到尾依次訪 問,訪問到一半不能往後退,便於循環比較大的數據集合,節省內存
迭代器有兩種類型:
1.集合數據類型:列表,字典,元組,集合,字符串
2.generator:包括生成器和帶有yield的生成函數
 

 

生成器 (Generator)

包含 yield 的函數。

yield 與 return 相比,能 多次 返回 值

定義生成器的方式:

(1)列表生成式的[]改爲()

使用for循環進行調用即可

(2)定義yield關鍵字

如果一個函數定義中包含yield關鍵字,則這個函數爲一個生成器

注意:yield的原理是,在每次進行迭代調用next()時執行,遇到yield語句返回,下次執行時從上次返回的yield語句處繼續執行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章