想要明白Python中的装潢器,不得不先明白闭包(closure)这一观点。(引荐进修:Python视频教程)
在计算机科学中,闭包(英语:Closure),又称词法闭包(Lexical Closure)或函数闭包(function closures),是援用了自在变量的函数。这个被援用的自在变量将和这个函数一同存在,纵然已离开了制造它的环境也不破例。
装潢器
一个平常的装潢器平常是如许:
import functools def log(func): @functools.wraps(func) def wrapper(*args, **kwargs): print('call %s():' % func.__name__) print('args = {}'.format(*args)) return func(*args, **kwargs) return wrapper
如许就定义了一个打印出要领名及其参数的装潢器。
挪用之,要运用@开首:
@logdef test(p): print(test.__name__ + " param: " + p) test("I'm a param")
输出:
call test(): args = I'm a param test param: I'm a param
装潢器在运用时,用了@语法,让人有些搅扰。实在,装潢器只是个要领,与下面的挪用体式格局没有区分:
def test(p): print(test.__name__ + " param: " + p) wrapper = log(test) wrapper("I'm a param")
@语法只是将函数传入装潢器函数,并没有奇异的地方。
值得注意的是@functools.wraps(func),这是python供应的装潢器。它能把原函数的元信息拷贝到装潢器内里的 func 函数中。函数的元信息包含docstring、name、参数列表等等。
能够尝试去除@functools.wraps(func),你会发明test.__name__的输出变成了wrapper。
更多Python相干技术文章,请接见Python教程栏目举行进修!
以上就是python装潢器以什么开首的细致内容,更多请关注ki4网别的相干文章!