类别:Python / 日期:2019-12-02 / 浏览:93 / 评论:0

装潢器(Decorators)是 Python 的一个重要部分。简朴地说:他们是修正其他函数的功用的函数。他们有助于让我们的代码更简短,也更Pythonic(Python范儿)。

想要明白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网别的相干文章!

打赏

感谢您的赞助~

打开支付宝扫一扫,即可进行扫码打赏哦~

版权声明 : 本文未使用任何知识共享协议授权,您可以任何形式自由转载或使用。

 可能感兴趣的文章

评论区

发表评论 / 取消回复

必填

选填

选填

◎欢迎讨论,请在这里发表您的看法及观点。