裝飾器:
不改變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語句處繼續執行。