閉包和裝飾器有什麼區別,你了解多少

2024年2月6日 20点热度 0人点赞

閉包和裝飾器都是Python中的高級特性,它們都涉及到函數的嵌套和引用。但是它們也有一些區別,主要有以下幾點:

  • 閉包的目的是為了保存外部函數的變量,而裝飾器的目的是為了給已有函數增加額外的功能。
  • 閉包的參數是一個變量,而裝飾器的參數是一個函數對象。
  • 閉包的返回值是一個內部函數,而裝飾器的返回值是一個處理後的函數對象。
  • 閉包的調用方式是直接調用內部函數,而裝飾器的調用方式是直接調用被裝飾的函數。

下面是一個閉包和裝飾器的對比示例:

# 閉包
def outer(x):
    def inner():
        print(x)
    return inner
f = outer(10) # f是一個閉包
f() # 輸出10
# 裝飾器
def decorator(func):
    def wrapper():
        print("before")
        func()
        print("after")
    return wrapper
@decorator
def work():
    print("do something")
work() # 輸出before, do something, after