python 函数高级功能(python基础教程)

网友投稿 282 2022-09-02


python 函数高级功能(python基础教程)

闭包

我们可以将闭包理解为一种特殊的函数,这种函数由两个函数的嵌套组成,且称之为外函数和内函数,外函数返回值是内函数的引用,此时就构成了闭包。

# 闭包# 外部函数的参数被内部函数引用,内部函数对外部参数的参数进行处理,返回一个结果,外部函数返回内部函数(引用内部函数)def a_func(n): def b_func(m): return n*m return b_func # 注意是没有(),不是b_func() # 外函数返回内函数的引用,这里的引用指的是内函数b_func在内存中的起始地址a=a_func(3)print(a(4))print(a(10))

装饰器

装饰函数,增加被装饰函数的功能

装饰器不带参数,被装饰参数不带参数

import time# 定义装饰函数def timer(func): # 统计执行时间 def wrapper(): start_time=time.time() func() stop_time=time.time() print('运行的时间 %s' %(stop_time-start_time)) return wrapper# 定义被装饰函数@timerdef i_can_sleep(): time.sleep(3)# 调用i_can-sleep方法i_can_sleep()# 执行顺序,首先将i_can_sleep()传给timer,也就是timer(i_can_sleep());# 然后执行wrapper()函数# 装饰器与闭包的不同点,装饰函数传入的参数是一个函数,闭包传入的参数

被装饰函数带参数

# 被装饰函数带参数,也就是装饰函数的外部函数带参数# 发现需要先定义装饰函数def tips(func): def nei(a,b): # 装饰函数的内部函数需要接收被装饰函数的参数 print('start') func(a,b) print('end') return nei@tipsdef sum(a,b): print(a+b)a=sum(8,9)

装饰器带参数

ef new_tips(args): def tips(func): def nei(a,b): # 装饰函数的内部函数需要接收被装饰函数的参数 print('start to %s' % args) func(a,b) print('end to %s' % args) return nei return tips@new_tips('add')def sum(a,b): print(a+b)a=sum(8,9)

还可以获取被装饰函数的一些信息

def new_tips(args): def tips(func): def nei(a,b): # 装饰函数内部函数需要接收被装饰函数的参数 print('func %s start to %s' % (func.__name__,args)) func(a,b) print('func %s end to %s' % (func.__name__,args)) return nei return tips@new_tips('add_module')def sum(a,b): print(a+b)a=sum(8,9)@new_tips('sub_module')def sub(a,b): print(a-b)

全部代码

# 装饰器import time# 定义装饰函数# 统计执行时间def timer(func): def wrapper(): start_time=time.time() func() stop_time=time.time() print('运行的时间 %s' %(stop_time-start_time)) return wrapper## # 定义被装饰函数@timerdef i_can_sleep(): time.sleep(3)# 调用i_can-sleep方法i_can_sleep()# 执行顺序,首先将i_can_sleep()传给timer,也就是timer(i_can_sleep());# 然后执行wrapper()函数# 装饰器与闭包的不同点,装饰函数传入的参数是一个函数,闭包传入的参数是一个变量print('----------------------------------------------被装饰参数带参数------------------------------------------------')# 被装饰函数带参数,也就是装饰函数的外部函数带参数# 发现需要先定义装饰函数def tips(func): def nei(a,b): # 装饰函数内部函数需要接收被装饰函数的参数 print('start') func(a,b) print('end') return nei@tipsdef sum(a,b): print(a+b)a=sum(8,9)print('----------------------------------------------装饰器带参数------------------------------------------------')# 装饰器带参数def new_tips(args): def tips(func): def nei(a,b): # 装饰函数内部函数需要接收被装饰函数的参数 print('start to %s' % args) func(a,b) print('end to %s' % args) return nei return tips@new_tips('add_module')def sum(a,b): print(a+b)a=sum(8,9)@new_tips('sub_module')def sub(a,b): print(a-b)b=sub(102,98)print('--------------------------------------------获取被装饰函数的一些信息--------------------------------------------------')# 还可以获取被装饰函数的一些信息def new_tips(args): def tips(func): def nei(a,b): # 装饰函数内部函数需要接收被装饰函数的参数 print('func %s start to %s' % (func.__name__,args)) func(a,b) print('func %s end to %s' % (func.__name__,args)) return nei return tips@new_tips('add_module')def sum(a,b): print(a+b)a=sum(8,9)@new_tips('sub_module')def sub(a,b): print(a-b)b=sub(10,7)

执行结果:

运行的时间 3.0007877349853516----------------------------------------------被装饰参数带参数------------------------------------------------start17end----------------------------------------------装饰器带参数------------------------------------------------start to add_module17end to add_modulestart to sub_module4end to sub_module--------------------------------------------获取被装饰函数的一些信息--------------------------------------------------func sum start to add_module17func sum end to add_modulefunc sub start to sub_module3func sub end to sub_moduleProcess finished with exit code 0


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:appium+python自动化:获取元素属性get_attribute(python appium定位元素)
下一篇:api测试工具都有哪些?好用的API测试工具推荐
相关文章

 发表评论

暂时没有评论,来抢沙发吧~