contextlib.contextmanager
这是一个装饰器, 可以将一个函数变成一个上下文管理器, 官方解释如下:
This function is a decorator that can be used to define a factory function for with statement context
managers, without needing to create a class or separate __enter__() and __exit__() methods
意思是说你想要创建一个上下文管理器时不需要手动实现enter和exit方法
使用如下
from contextlib import contextmanager
In [11]: @contextmanager
...: def managed_resource(*args, **kwargs):
...: resource = args
...: try:
...: print('process')
...: yield resource
...: finally:
...: print("end")
...:
In [12]: with managed_resource(1,2,3) as m: # m就是managed_resource的执行结果, 即yield后面的日容
...: print(m)
...:
...:
运行结果如下:
process
(1, 2, 3)
end
判断一个函数的参数类型
django的信号模块使用了这个方法, 检查connect的函数参数类型是否合法,
使用inspact库
def foo(a,b, c=None):
pass
print( [i.kind for i in inspect.signature(foo).parameters.values()])
输出如下:
[
<_ParameterKind.POSITIONAL_OR_KEYWORD: 1>,
<_ParameterKind.POSITIONAL_OR_KEYWORD: 1>,
<_ParameterKind.POSITIONAL_OR_KEYWORD: 1>
]