python之各种装饰器的使用
"""
裝飾器,帶參數的裝飾器,類的裝飾器
判斷是否為可迭代的
from collections import Iterable
print(isinstance([1,2,3],Iterable))
"""
# 1、簡單的裝飾器
def debug(func):
def wrap():
print(f'debug:func name is {func.__name__}')
return func()
return wrap
@debug
def calculate():
return 1+2
print(calculate())
# 2、裝飾器帶參數,先接受的是參數,后接受的是函數
def debug(parameter):
def wrapper(func):
def wrap():
print(f'debug:func name is {func.__name__}')
print(f'debug:func parameter is {parameter}')
return func()
return wrap
return wrapper
@debug('testdata')
def calculate():
return 1+2
print(calculate())
# 3、裝飾帶參數的函數,需要將參數給定義的wrap
def debug(func):
def wrap(a, b):
print(f'debug:func name is {func.__name__}')
return func(a, b)
return wrap
@debug
def calculate(a,b):
return a+b
print(calculate(1,2))
"""
函數修飾函數
4、裝飾器帶參數,同時裝飾的函數也帶參數
"""
def debug(parameter):
def wrapper(func):
def wrap(c, d):
print(f'debug:func name is {www.shengchangyule.net func.__name__}')
print(f'debug:func parameter is {parameter}')
return func(c, d)
return wrap
return wrapper
@debug('data')
def calculate(c, d):
return c*d
print(calculate(5,7))
"""
函數修飾類
5、帶參數的函數裝飾器 裝飾 帶參數的類
"""
def debug(parameter):
def inner(func):
def wrap(a,b):
print("class name:www.yongxin7.cn/", func.__name__)
print("genrator parameter is:", parameter)
return func(a,b)
return wrap
return inner
@debug('get')
class Calculate(object):
def __init__(self,a,b):
self.a = a
self.b = b
def cal(self):
num = self.a + self.b
return num
def sal(self):
cnum = self.a * self.b
return cnum
c = Calculate(3,4)
print(c.cal())
"""
類裝飾函數
6,帶參數的類裝飾器 修飾 帶參數的函數
ini里面接受的是裝飾器的參數,如果無參數則接受的是函數名
"""
class Debug(object):
def __init__(self,parameter):
self.parameter www.365soke.com= parameter
def __call__(self, func):
def wrap(a,b):
print('function name is', func.__name__)
print('debug parameter is', self.parameter)
return func(a,b)
return wrap
@Debug('post')
def calculate(a,b):
c = a * b
return c
print(calculate(2,5))
"""
類裝飾類
7 帶參數的類裝飾器 裝飾 帶參數的類
"""
class Debug(object):
def __init__(self, parameter):
self.parameter = parameter
def __call__(self, func):
def wraps(a,b):
print('function name www.shengchanyule.com is', func.__name__)
print('debug parameter is', self.parameter)
return func(a,b)
return wraps
@Debug('get')
class Calculate(object):
def __init__(self,a,b):
self.a = a
self.b = b
def cal(self):
num = self.a + self.b * self.a
return num
c = Calculate(5,3)
print(c.cal())
轉載于:https://www.cnblogs.com/qwangxiao/p/10724496.html
總結
以上是生活随笔為你收集整理的python之各种装饰器的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NLayerAppV3--.net Co
- 下一篇: python读取excle表格数据,将数