1. 程式人生 > >生成器,迭代器和裝飾器

生成器,迭代器和裝飾器

1.生成器

解析器在實時生成資料,資料不會駐留在記憶體中。因此,其執行效率很高!
yield 是一個類似 return 的關鍵字,只是這個函式返回的是個生成器
當你呼叫這個函式的時候,函式內部的程式碼並不立即執行 ,這個函式只是返回一個生成器物件
當你使用for進行迭代的時候,函式中的程式碼才會執行

  • 推導式建立生成器:
list1 = (i**2 for i in range(10) if i%2==0)
for item in list1:
    print(item)
  • yield方式
def createGenerator():
    for i in range(10):
        if i%2==0:
            yield i**2

myGenerator = createGenerator()

for item in myGenerator:
    print(item)

2.迭代器

迭代是Python最強大的功能之一,是訪問集合元素的一種方式。
迭代器是一個可以記住遍歷的位置的物件。
迭代器物件從集合的第一個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退。
迭代器有兩個基本的方法:iter() 和 next()。
字串,列表、元組和字典物件都可用於建立相應的迭代器

list1 = [2,3,4,56,78]
iter1 = iter(list1)
while True:
    try:
        print(next(iter1))
    except StopIteration:
        break

3.生成器是特殊的迭代器:

list1 = (i**2 for i in range(10) if i%2==0)
print(next(list1))
print(next(list1))
#結果為 0  4

4.裝飾器

裝飾器是個函式,用於日誌、事務、許可權等的程式設計(AOP:面向切面程式設計),是非侵入式的程式設計方式

def loginfo(func):
        print("---------------")
        def wrapper():
            print("那誰登陸了我們的系統")
            func()
            print("那誰登陸了我們的系統")
        return wrapper

@loginfo 
def login():
    print("歡迎誰誰誰登陸")
    pass