经过前面4篇文章对Python函数使用有了一定了解,下面开始实现自己的装饰器
#! -*- coding: utf-8 -*-
def a_new_decorator(a_func):
def wrapTheFunction():
print("I am doing some boring work before a_func()")
# 比较难理解的是,这儿其实是个函数调用
a_func()
print("im am doing some boring work after a_func()")
# 返回一个函数标签
return wrapTheFunction
def a_function_requiring_decoration():
print("I am the function which need some decoration to remove my foul smell")
#直接函数调用
a_function_requiring_decoration()
print(a_function_requiring_decoration.__name__)
# 装饰器语法糖做了这么一件事情,在运行的时候
a_function_requiring_decoration = a_new_decorator(a_function_requiring_decoration)
print(a_function_requiring_decoration.__name__)
a_function_requiring_decoration()
执行结果:
a_function_requiring_decoration
wrapTheFunction
I am doing some boring work before a_func()
I am the function which need some decoration to remove my foul smell
im am doing some boring work after a_func()
发现通过上述方法也可以实现装饰器语法类似的作用。
小结
装饰器语法实现在运行时将待装饰的函数重新指向装饰后的函数,但是也发现了一个新的问题。
装饰过的原函数__name__参数发生了变化
,这是可以理解的,因为这里我们只是讲函数名重新指向一个新的函数,新的函数就是wrapTheFunction
。
网友评论