Post

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>、