ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python3 装饰器

2019-04-27 10:37:41  阅读:246  来源: 互联网

标签:func2 return wrapper python3 func print 装饰 def


'''装饰器的固定格式'''
def wrapper(func):
    def inner(*args, **kwargs):
        print("执行前")
        ret = func(*args, **kwargs)
        print("执行后")
        return ret
    return inner

@wrapper #func = wrapper(func)
def func():
    print("func is running...")

func()

执行结果:
执行前
func is running...
执行后

'''带参数的装饰器'''
def wrapper(flag):
def outer(func):
def inner(*args, **kwargs):
if flag:
print("在之前.")
ret = func(*args, **kwargs)
print("在之后")
return ret
else:
return func(*args, **kwargs)
return inner
return outer

@wrapper(1) # 先执行wrapper(1),返回outer,@outer就是语法糖
def func():
print("func is running...")

@wrapper(0) #先执行wrapper(0),返回outer,@outer就是语法糖
def func2():
print("func2 is running...")

func()
func2()
执行结果:
在之前.
func is running...
在之后
func2 is running..

'''写日志'''
def record_log(file):
def log(fn):
def inner(*args, **kwargs):
ret = fn(*args, **kwargs)
with open(file, mode="a", encoding="utf-8") as f: #记录日志
f.write("调用函数: %s" % fn.__name__)
return ret
return inner
return log

@record_log('func1.txt')
def func1(): # 日志放在func1.txt
print("我是func1")

@record_log('func2.txt')
def func2(): # 日志放在func2.txt
print("我是func2")

func1()
func2()

执行结果:
我是func1
我是func2

 

 

标签:func2,return,wrapper,python3,func,print,装饰,def
来源: https://www.cnblogs.com/lilyxiaoyy/p/10777897.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有