python 函数装饰器_python函数装饰器的用法
函數裝飾器:
開閉原則:在面向對象編程領域中,開閉原則規定“軟件中的對象(類,模塊,函數等等)應該對于擴展是開放的,
但是對于修改是封閉的”,這意味著一個實體是允許在不改變它的源代碼的前提下變更它的行為。
三要素:
1、不能更改原函數
2、不能改變被裝飾函數的調用方式
3、滿足1、2的情況下給程序增加功能 (這個函數不能動)
定義公式:
常用場景:它經常用于有切面需求的場景,比如:插入日志、性能測試、事務處理、緩存、權限校驗等場景。
多個裝飾器同時修飾函數:裝飾器執行順序:從最后一個裝飾器開始執行到第一個裝飾器
"""
# 簡單的裝飾器
# def fn(f1):
# def fc():
# print("這里開始對f1函數權限進行驗證")
# f1()
# print("f1函數已經處理完畢了")
# return fc
#
# def f1():
# print("這里f1函數的功能展示")
#
# t = fn(f1)
# t()
# 為了可視化和模塊化,對上面的同一個功能的高級裝飾函數進行統一標識,達到更好的效果
# @fn #這個@fn標識符效果等同于f1=fn(f1)
# 注意這個時候函數不用再這樣fn(f1)()的調用了,而是直接使用f1()即可達到fn(f1)()的效果了
# 因為@fn的效果等同于f1=fn(f1),所以直接調用f1()相當于實現了fn(f1)(),進而達到原來的效果。
# def fn(f1):
# def fc():
# print("這里開始對f1函數權限進行驗證")
# f1()
# print("f1函數已經處理完畢了")
# return fc
#
# @fn
# def f1():
# print("這里f1函數的功能展示")
#
# f1()
## 多個裝飾器裝飾被裝飾函數的執行順序
# 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):
# """
# 如果原函數有參數,那閉包函數必須保持參數個數一致,并且將參數傳遞給原方法
# 如果被裝飾的函數有行參,那么閉包函數必須有參數
# """
# def inner(name):
# print('say inner called')
# fun(name)
# return inner
#
# @w_say
# def hello(name):
# print('hello ' + name)
#
# hello('曉鑫')
# 多個函數使用裝飾器 傳入多個參數
# 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)
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的python 函数装饰器_python函数装饰器的用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pc 页面在移动端怎么获取放大倍数、_百
- 下一篇: 调用 标签打印软件_标签打印软件如何制作