events.py 知识点记录
1._all_
__all__是一个字符串list,其他模块中使用from xxx import *的时候只能导入__all__列表里的内容
2.sys.version_info
获取版本号
import sys
print(sys.version_info)
输出
sys.version_info(major=3, minor=7, micro=2, releaselevel='final', serial=0)
比较时候
sys.version_info >= (3, 4) #是个元组
3.inspect.unwrap
装饰器的解包,前提是装饰器上添加了@wraps(func)装饰器。
参考链接:https://www.cnblogs.com/blackmatrix/p/6875359.html
4.__wrapped__获取被装饰之前的方法
5.判断是否是方法 inspect.isfunction
如果是输出True,否则False。
4-5涉及的代码
from functools import wraps
import inspect
def log(func):
@wraps(func)
def wrapper(*args, **kwargs):
result = func(*args)
print(func.__name__,'has been called')
return result
return wrapper
#等价于add = log(add)
@log
def add(x, y):
result = x+y
return result
if __name__ == '__main__':
print(add(1, 3))
print(inspect.isfunction(int))
orig_add = add.__wrapped__
print(inspect.isfunction(orig_add))
print(orig_add(1,3))
输出
add has been called
4
False#int不是方法所以输出了Flase
True
#上面的是被装饰器装饰后的函数调用结果
#下面是被装饰前的函数的结果
4
6.__code__获取代码行数或者代码所在文件
用的还是4-5的代码
if inspect.isfunction(orig_add):
code = orig_add.__code__
print (code.co_filename, code.co_firstlineno)
输出
/Users/chennan/pythonproject/demo/asyncdemo/1.py 12