📜  Python中的函数装饰器1(简介)

📅  最后修改于: 2020-04-06 07:49:28             🧑  作者: Mango

背景

以下是有关Python中的函数的重要事实,可用于了解装饰器函数。

  1. 在Python中,我们可以在另一个函数内定义一个函数。
  2. 在Python中,一个函数可以作为参数传递给另一个函数(一个函数也可以返回另一个函数)。
    # Python程序,展示一个函数可以在另一个函数内定义,也可以作为参数传递
    
    def messageWithWelcome(str):
        # 嵌套的函数
        def addWelcome():
            return "欢迎来到 "
        # 返回 addWelcome()
        # 和 str的串联
        return  addWelcome() + str
    # 获得网站名称
    def site(site_name):
        return site_name
    print messageWithWelcome(site("芒果文档"))

    输出:

    欢迎来到 芒果文档

    函数装饰器

    装饰器是一个将函数作为唯一参数并返回函数。这有助于用相同的代码一遍又一遍地“包装”函数。例如,上面的代码可以如下重写。

我们使用@func_name指定要在另一个函数上应用的装饰器。

#  把fun() 作为参数,并返回welcome().
def decorate_message(fun):
    # 嵌套函数
    def addWelcome(site_name):
        return "欢迎来到 " + fun(site_name)
    # 装饰器返回函数
    return addWelcome
@decorate_message
def site(site_name):
    return site_name;
# 测试代码
# 等效于调用decorate_message() 并传入site("芒果文档")作为参数
print site("芒果文档")

输出:

欢迎来到 芒果文档

装饰器对于将数据(或添加属性)附加到函数上也很有用

# Python展示将将数据(或添加属性)附加到函数上
def attach_data(func):
       func.data = 3
       return func
@attach_data
def add (x, y):
       return x + y
# 测试代码
# 等效于调用 attach_data(),并使用 add()作为参数
print(add(2, 3))
print(add.data)

输出:

5
3

‘add()’返回作为参数传递的x和y的和,但它由装饰器函数包装,调用add(2,3)只会给出两个数字的和,但是当我们调用add.data时,’add’函数为传递给装饰器函数’attach_data’作为参数,此函数返回带有属性’data’的’add’函数,该属性设置为3,从而进行打印。
Python装饰器是删除冗余的强大工具。