python contextmanager

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

意思是说你想要创建一个上下文管理器时不需要手动实现enterexit方法
使用如下

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>
]

你可能感兴趣的:(python contextmanager)