1. 程式人生 > 實用技巧 >python-閉包函式、裝飾器、迭代器、生成器

python-閉包函式、裝飾器、迭代器、生成器

1、閉包函式

閉包函式有三個特性:

  1. 函式中巢狀函式
  2. 外層函式返回記憶體巢狀的函式名
  3. 巢狀函式對外部作用域有一個非全域性變數的引用
def func():
    a = 100

    def func2():
        print(a)

    return func2

2、裝飾器

語法:@裝飾器
裝飾器的作用:在不更改原功能函式程式碼和呼叫方式的基礎上給函式擴充套件新的功能。

開放封閉原則:

  • 開放:對功能的擴充套件時開放的
  • 封閉:對已經實現的功能的修改是封閉的

def func(fu):
    """
    :param fu: 被裝飾的函式
    :return:
    
""" def wrapper(): print("裝飾擴充套件的新功能1") print("裝飾擴充套件的新功能2") # 呼叫原功能函式 fu() print("裝飾擴充套件的新功能3") return wrapper @func # ----> print_info = func(print_info) def print_info(): print("---原功能函式列印的個人資訊---") print_info()


結果:

3、迭代器和生成器

可迭代物件:python中可以使用for去進行遍歷的都叫可迭代物件

  - 字串、列表、元組、字典、range

迭代器:可迭代物件的一種,可以用內建函式next迭代取值

生成器:它是一種特殊的迭代器,同過yield可以定義生成器函式

li = [11,22,33,44]

# 使用內建函式iter講迭代物件轉換為迭代器
ite = iter(li)

res = next(ite)
print(res)
print(next(ite))
print(next(ite))
print(next(ite))
print(next(ite))  # -------超出迭代範圍

def gen():
    "生成器函式"
    for i in range(100):
        
yield i print("函式呼叫列印",i) g = gen() print(next(g)) print(next(g)) print(next(g))