python 函数装饰器_python函数装饰器的用法
函數(shù)裝飾器:
開閉原則:在面向?qū)ο缶幊填I(lǐng)域中,開閉原則規(guī)定“軟件中的對象(類,模塊,函數(shù)等等)應(yīng)該對于擴(kuò)展是開放的,
但是對于修改是封閉的”,這意味著一個實(shí)體是允許在不改變它的源代碼的前提下變更它的行為。
三要素:
1、不能更改原函數(shù)
2、不能改變被裝飾函數(shù)的調(diào)用方式
3、滿足1、2的情況下給程序增加功能 (這個函數(shù)不能動)
定義公式:
常用場景:它經(jīng)常用于有切面需求的場景,比如:插入日志、性能測試、事務(wù)處理、緩存、權(quán)限校驗(yàn)等場景。
多個裝飾器同時修飾函數(shù):裝飾器執(zhí)行順序:從最后一個裝飾器開始執(zhí)行到第一個裝飾器
"""
# 簡單的裝飾器
# def fn(f1):
# def fc():
# print("這里開始對f1函數(shù)權(quán)限進(jìn)行驗(yàn)證")
# f1()
# print("f1函數(shù)已經(jīng)處理完畢了")
# return fc
#
# def f1():
# print("這里f1函數(shù)的功能展示")
#
# t = fn(f1)
# t()
# 為了可視化和模塊化,對上面的同一個功能的高級裝飾函數(shù)進(jìn)行統(tǒng)一標(biāo)識,達(dá)到更好的效果
# @fn #這個@fn標(biāo)識符效果等同于f1=fn(f1)
# 注意這個時候函數(shù)不用再這樣fn(f1)()的調(diào)用了,而是直接使用f1()即可達(dá)到fn(f1)()的效果了
# 因?yàn)?#64;fn的效果等同于f1=fn(f1),所以直接調(diào)用f1()相當(dāng)于實(shí)現(xiàn)了fn(f1)(),進(jìn)而達(dá)到原來的效果。
# def fn(f1):
# def fc():
# print("這里開始對f1函數(shù)權(quán)限進(jìn)行驗(yàn)證")
# f1()
# print("f1函數(shù)已經(jīng)處理完畢了")
# return fc
#
# @fn
# def f1():
# print("這里f1函數(shù)的功能展示")
#
# f1()
## 多個裝飾器裝飾被裝飾函數(shù)的執(zhí)行順序
# def makeBold(fun):
# print('----a----')
# def inner():
# print('----1----')
# return '' + fun() + ''
# return inner
#
# def makeItalic(fun):
# print('----b----')
# def inner():
# print('----2----')
# return '' + fun() + ''
# return inner
#
# @makeBold
# @makeItalic
# def test():
# print('----c----')
# print('----3----')
# return 'hello python decorator'
#
# res= test()
# print(res)
## 裝飾器傳參
# def w_say(fun):
# """
# 如果原函數(shù)有參數(shù),那閉包函數(shù)必須保持參數(shù)個數(shù)一致,并且將參數(shù)傳遞給原方法
# 如果被裝飾的函數(shù)有行參,那么閉包函數(shù)必須有參數(shù)
# """
# def inner(name):
# print('say inner called')
# fun(name)
# return inner
#
# @w_say
# def hello(name):
# print('hello ' + name)
#
# hello('曉鑫')
# 多個函數(shù)使用裝飾器 傳入多個參數(shù)
# def w_add(func):
# def inner(*args, **kwargs):
# print('add inner called')
# func(*args, **kwargs)
# return inner
#
# @w_add
# def add(a, b):
# print('%d + %d = %d' % (a, b, a + b))
#
# @w_add
# def add2(a, b, c):
# print('%d + %d + %d = %d' % (a, b, c, a + b + c))
#
# add(2, 4)
# add2(2, 4, 6)
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的python 函数装饰器_python函数装饰器的用法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pc 页面在移动端怎么获取放大倍数、_百
- 下一篇: python深复制与浅复制_Python