Python装饰器
基础知识-关于函数
在python中,函数可以作为变量传递给另一个函数,还可以在函数之内嵌套,如:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 首先定义一个普通的函数
def print_text(name):
return 'hello,'+ name
# 再定义一个嵌套函数,分别以函数和普通的字符串作为参数
def add_tag(func):
def prt_func(name):
return '<p>{0}</p>'.format(func(name))
return prt_func
# 将函数作为参数传递给 add_tag
hlo = add_tag(print_text)
# 将 'crossin' 作为参数传递给 hlo
print(hlo('crossin'))
# 结果 : <p>hello,crossin</p>
这里在函数add_tag内嵌套定义了一个函数prt_func,并且在pre_func函数内调用了作为参数的函数func.
装饰器
这种在不改变原print_text函数内容的情况下,动态增加功能的方式,就是装饰器的作用。
不带参数的装饰器
将以上代码稍作修改,就可以得到一个装饰器
1
2
3
4
5
6
7
8
9
10
11
12
13
# 定义一个嵌套函数,分别以函数和普通的字符串作为参数
def add_tag(func):
def prt_func(name):
return '<p>{0}</p>'.format(func(name))
return prt_func
# 定义一个普通的函数,并调用装饰器
@add_tag
def print_text(name):
return 'hello,'+ name
print(print_text('crossin'))
# 结果 : <p>hello,crossin</p>
用@add_tag装饰器去修饰print_text函数,便可以在执行print_text函数时,将其作为参数传递给add_tag函数执行。
带参数的装饰器
如果想添加不同的tag,那么要让add_tag函数也能接收参数,以在不重新写其他装饰器的前提下,随心所欲的使用 <div>、