# 外部函式接收姓名引數
defconfig_name
(name)
:# 內部函式儲存外部函式的引數,並且完成資料顯示的組成
definner
(msg)
:print
(name+
": "
+msg)
# 外部函式要返回內部函式
return inner
# 建立閉包物件
tom = config_name(
"tom"
)jane = config_name(
"jane"
)tom(
"hello! jane"
)jane(
"hello! tom"
)
# 定義通用裝飾器
defdecorator
(func)
:# 裝飾器的引數型別為函式,且只有乙個
# 使用裝飾器裝飾已有函式的時候,內部函式的型別和要裝飾的已有函式的型別保持一致
definner
(*args,
**kwargs)
:# 在內部函式對已有函式進行裝飾
print
("正在努力執行加法計算"
)# *args:把元組裡面的每乙個元素,按照位置引數的方式進行傳參
# **kwargs:把字典裡面的每一鍵值對,按照關鍵字的方式進行傳參
# 這裡對元組合字典進行拆包,僅限於結合不定長引數的函式使用
num = func(
*args,
**kwargs)
return num
return inner
@decorator # show=decorator(show)
defshow()
:return
"hello world!"
show = show(
)print
(show)
# 定義p裝飾器
defdecorator_p
(func)
:def
inner()
: p =
""+func()+
""return p
return inner
# 定義div裝飾器
defdecorator_div
(func)
:def
inner()
: div =
""+func()+
""return div
return inner
# 多裝飾器由內向外執行,先執行decorator_p再執行decorator_div
@decorator_div # show=decorator_div(decorator_p(show))
@decorator_p # show=decorator_p(show)
defshow()
:return
"hello world!"
show = show(
)print
(show)
def
return_decorator
(flag)
:def
decorator
(func)
:def
inner
(sum1, sum2)
:if flag ==
"+":
print
("——正在執行加法運算——"
)elif flag ==
"-":
print
("——正在執行減法運算——"
)return func(sum1, sum2)
return inner
return decorator
@return_decorator(
"+")
defsum_add
(num1, num2)
: result = num1 + num2
return result
@return_decorator(
"-")
defsum_sub
(num1, num2)
: result = num1 - num2
return result
sum_add = sum_add(3,
3)print
(sum_add)
sum_sub = sum_sub(6,
3)print
(sum_sub)
# 定義類裝飾器
class
mydecorator
(object):
def__init__
(self, func)
: self.func = func
# 實現__call__這個方法,讓物件變成可呼叫的物件,可呼叫的物件能夠像函式一樣使用
def__call__
(self,
*args,
**kwargs)
:# 對已有函式進行封裝
print()
self.func(
)@mydecorator # @mydecorator => show = mydecorator(show)
defshow()
:print()
# 執行show # 執行mydecorator類建立例項物件 -> show() => 物件()
show(
)
Python 閉包和裝飾器學習
def out func func functools.wraps 可以將原函式物件的指定屬性複製個包裝函式物件 functools.wraps func def inner func func,args,kwargs return func return inner func out func d...
python裝飾器和閉包
下面幾個部落格有裝飾器的講解,也包含了裝飾器幾種情況的例子,比如說被裝飾的函式帶引數,裝飾器本身帶引數等。理解python中的裝飾器 python裝飾器學習 例子 其實裝飾器跟設計模式中的裝飾器模式基本一樣,就是在已有的函式上新增新的功能,這也是自己對裝飾器的一點簡陋的理解了。下面是自己寫的簡單例子...
python閉包和裝飾器
要理解裝飾器,就要明白閉包 要明白閉包,首先就要從高階函式和作用域說起 說道作用域,一般會談到legb規則。所謂的legb l locals,當前命名空間 區域性作用域 e enclosing,外部函式的命名空間 外部作用域 g global,全域性的命名空間 b bulit in,內建的命名空間平...