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

原文地址:https://www.cnblogs.com/c-x-a/p/10339286.html