Python中装饰器的概念
装饰器(Decorators)是 Python 的一个重要部分。简单地说:他们是修改其他函数的功能的函数。他们有助于让我们的代码更简短,也更Pythonic(Python范儿)。大多数初学者不知道在哪儿使用它们,所以我将要分享下,哪些区域里装饰器可以让你的代码更简洁。 首先,让我们讨论下如何写你自己的装饰器。
这可能是最难掌握的概念之一。我们会每次只讨论一个步骤,这样你能完全理解它。
以上来自菜鸟教程
装饰器本身就是一个函数,它只不过是对另外一个函数进行了一次封装,它能够把那个函数的功能进行一个强化
例如1:
#!/usr/bin/env python
def day1():
print("My function name is:", day1.__name__)
def main():
day1()
if __name__ == "__main__":
main()
>>> My function name is: day1
在以上代码块中定义了一个函数为:day1, 输出一句话为:My function name is: day1,那么装饰器能够把原来的函数功能上进行一个强化的操作。 在以上函数中输出了一句话,若我们需要在输出一句话如:hello world 若没装饰器 如下:
#!/usr/bin/env python
def day1():
print("hello world")
print("My function name is:", day1.__name__)
def main():
day1()
if __name__ == "__main__":
main()
>>>
hello world
My function name is: day1
若有装饰器如下:
#!/usr/bin/env python
def day2(func):
print("hello world")
return func
@day2
def day1():
print("My function name is:", day1.__name__)
def main():
day1()
if __name__ == "__main__":
main()
>>>
hello world
My function name is: day1
在以上代码块中出现了@符号,以及day2函数,现在不用管它是什么意思,以上代码已经实现了装饰器对原来的函数功能进行了一次强化,但是在第一个代码块中只需要加一句话就可以实现,但是在第二个代码中还需要在写一个函数,感觉会非常麻烦,但是如果被强化的函数有1万个,难道需要一行行去添加吗?,很显然是不可以的,所以接下来开始讲解装饰器。
一、装饰器定义
加粗样式 在定义装饰器之前首先我们需要有一个函数,因为装饰器是对函数进行了一次封装同时对函数进行强化的作用。
1.1、定义一个函数
def tony():
print("my function name is:", tony.__name__) # 每一个函数的名字都可以自带一个变量:__name__就是函数名它自己
def main():
tony()
if __name__ == "__main__":
main()
> my function name is: tony # 输出内容
1.2、使用装饰器对tony函数进行增强操作
#!/usr/bin/env python
def deco_iron(func):
print("开始运行:", deco_iron.__name__)
return func
def tony():
print("my function name is:", tony.__name__)
def main():
tony()
if __name__ == "__main__":
main()
将tony函数传入deco_