📅  最后修改于: 2020-04-06 07:49:28             🧑  作者: Mango
# 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装饰器是删除冗余的强大工具。