标签:装饰器 主函数 def 函数定义 nbsp 列表 result generator 功能
装饰器可以使函数执行前和执行后分别执行其他的附加功能,这种在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator),装饰器的功能非常强大。装饰器一般接受一个函数对象作为参数,以对其进行增强 说白了:就相当于C++中的构造函数,与析构函数
假设:我定义了一个函数lyshark,现在想要在不改变原来函数定义的情况下,在函数运行前打印一段话,函数运行后打印另一段话,要实现这样一个功能该怎么实现?看以下实现方式:
>>> import os >>> import sys >>> >>> def outer(function): def inner(): print("主函数执行前,应先执行我!") result=function() print("主函数执行后,要执行我!") return result return inner
# (1) @ + 函数名 直接作用在需要装饰的函数上一行
# (2)自动执行outer函数并且将下面的函数名lyshark()当做参数传递到outer()
# (3)将outer函数的返回值inner,重新赋值给lyshark()函数
>>> @outer def lyshark(): print("lyshark 的主函数体,装饰器在装饰我(*^_^*)") return "lyshark 返回了" >>> ret=lyshark() 主函数执行前,应先执行我! lyshark 的主函数体,装饰器在装饰我(*^_^*) 主函数执行后,要执行我! >>> >>> print("lyshark()函数的返回值: ",ret) lyshark()函数的返回值: lyshark 返回了 >>>
假设:我们在前面的基础上给函数传递一个参数看看,它有啥反应,刺激一下它
>>> import os >>> import sys >>> >>> def outer(function): def inner(args): print("主函数执行前,应先执行我!") ret=function(args) print("主函数执行后,要执行我!") return ret return inner >>> @outer def lyshark(args): print(args) return "lyshark 返回了" >>> >>> ret=lyshark("hello world!") 主函数执行前,应先执行我! hello world! 主函数执行后,要执行我! >>> >>> print("lyshark 的返回值是:",ret) lyshark() 函数的返回值是: lyshark 返回了 >>> >>>
假设:我们在前面的基础上给函数传递两个参数看看,它有啥反应,刺激一下它
>>> import os >>> import sys >>> >>> >>> def outer(function): def inner(x,y): print("主函数执行前,应先执行我!") ret=function(x,y) print("主函数执行后,要执行我!") return ret return inner >>> @outer def lyshark(x,y): print(x,y) return "lyshark 返回了" >>> >>> ret=lyshark("Hello","LyShark") 主函数执行前,应先执行我! Hello LyShark 主函数执行后,要执行我! >>> >>> print("lyshark() 函数的返回值是:",ret) lyshark() 函数的返回值是: lyshark 返回了 >>> >>>
>>> import os >>> import sys >>> >>> def outer(function): def inner(*args,**kwargs): print("主函数执行前,应先执行我!") ret=function(*args,**kwargs) print("主函数执行后,要执行我!") return ret return inner >>> >>> @outer def lyshark(*args): print(args) return "lyshark 返回了" >>> >>> num=[1,2,3,4,5] >>> ret=lyshark(num) 主函数执行前,应先执行我! ([1, 2, 3, 4, 5],) 主函数执行后,要执行我! >>> >>> print("lyshark() 函数的返回值是:",ret) lyshark() 函数的返回值是: lyshark 返回了 >>> >>>
迭代器是访问集合元素的一种方式。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退。另外,迭代器的一大优点是不要求事先准备好整个迭代过程中所有的元素。迭代器仅仅在迭代到某个元素时才计算该元素,而在这之前或之后,元素可以不存在或者被销毁。这个特点使得它特别适合用于遍历一些巨大的或是无限的集合,比如几个G的文件
参考文献:http://www.runoob.com/
标签:装饰器 主函数 def 函数定义 nbsp 列表 result generator 功能
原文地址:https://www.cnblogs.com/LyShark/p/9139266.html