閉包和裝飾器都是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
![](https://news.xinpengboligang.com/upload/keji/b08eb5546335928e6b34a7cee439642c.jpeg)