旗下导航:搜·么
当前位置:网站首页 > Python教程 > 正文

python装潢器以什么开首【Python教程】,python

作者:搜教程发布时间:2019-11-27分类:Python教程浏览:25评论:0


导读:装潢器(Decorators)是Python的一个重要部分。简朴地说:他们是修正其他函数的功用的函数。他们有助于让我们的代码更简短,也更Pythonic(Python范儿)。...
装潢器(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网别的相干文章!

标签:python


欢迎 发表评论: