Python 装饰器
来源:互联网 发布:安宫教务网络管理系统 编辑:程序博客网 时间:2024/06/05 05:37
Python装饰器相关知识:
1. 不加functools出现函数签名问题
2. 装饰器有无参数的构造
3. 一些小的注意事项
# !/usr/bin/env python# encoding: utf-8import functools"""@version: 0.1@author: feikon@license: Apache Licence @contact: crossfirestarer@gmail.com@site: https://github.com/feikon@software: PyCharm@file: python_decorator.py@time: 2017/6/6 16:21"""# decorator 第一种情况,不需要传入参数,直接进行操作进行def log(func): def wraper(): print('call %s:' % func.__name__) return func() return wraper@logdef now(): print('2017-6-6')print(now())print(now.__name__) # 输入wraper,非now,函数签名有问题需要再次装饰print('\n')# decorator 第二种情况,对decorator传入参数,这里参数为text# 只有调用的函数需要加括弧,比如func(),代表now(),而其他的装饰器东西不需要加括号,如:wraper,decorator# 注意函数的返回层级,先返回要装饰的函数,然后一层一层向上推 func()-->wraper-->decorator# 传入的参数可以看作装饰器对参数又加一层装饰def arg_log(text): def decorator(func): def wraper(): print('%s call begin %s:' % (text, func.__name__)) return func() return wraper return decorator@arg_log('Execute')def now2(): print('2017-6-7')print(now2())print(now2.__name__) # 输出wraper,而不是真正的函数名now2,函数签名有问题,需要再次装饰# 解决函数签名问题方案:引入functools中的functools.wrapsdef log(func): @functools.wraps(func) # 加入functools中的函数包装 def wraper(): print('call %s:' % func.__name__) return func() return wraper@logdef now(): print('2017-6-6')print(now())print(now.__name__) # 输入now,函数签名问题解决print('\n')def arg_log(text): def decorator(func): @functools.wraps(func) # 需要装饰那个函数,就把它放在要装饰的下面 def wraper(): print('%s call begin %s:' % (text, func.__name__)) return func() return wraper return decorator@arg_log('Execute')def now2(): print('2017-6-7')print(now2())print(now2.__name__) # 输出now2,函数签名问题解决
阅读全文
0 0
- python装饰器装饰类
- [python]python装饰器
- Python装饰器学习
- Python装饰器
- python 装饰器
- Python装饰器
- python 装饰器 应用
- python 装饰器2
- Python装饰器学习
- python装饰器
- python装饰器
- python 装饰器入门
- python装饰器
- python装饰器
- python 装饰器'@'
- python装饰器
- Python装饰器详解
- python 装饰器
- [2] Centos 7.3 文件、目录管理
- [音之国度读存档]设计篇
- Bootstrap弹出窗内容的换行
- 学习笔记——JAVA线程<7>线程的总结
- 面向对象的三大特征
- Python 装饰器
- 逆向最大匹配分词RMM
- java实现生产者消费者问题
- 欢迎使用CSDN-markdown编辑器
- SQLlite新建数据库
- 使用EA画类图
- div模拟textarea
- java守护线程见解
- Thymeleaf+Spring+Maven MacOS