Python装饰器翻译慕课网
来源:互联网 发布:java 编码 编辑:程序博客网 时间:2024/05/20 01:45
def in_dec(*arg):
print('in dec arg',arg)
if len(arg) == 0:
return 0
for val in arg:
if not isinstance(val,int):
return 0
return func(*arg)
return in_dec
@dec 1
def my_sum(*arg):
print('in my_sum')
return sum(arg)
print(my_sum(1,2,3,4,5)) 2
分析:函数不用全执行,1调用deco,参数为被装饰的函数my_sum。调用哪里执行哪里。1.从1开始执行,调用dec函数,func=my_sum并把值返回给my_sum即my_sum=in_dec。跳过闭包(闭包为函数,不调用不执行。只有调用才执行),其它没有调用不用执。当执行2时,由1中,my_sum=in_dec调用in_dec,返回值中调用my_sum(由1可知)。
又如这个例子说明,闭包为函数,只有调用才去执行。1执行函数调用deco,跳过闭包,执行语句输出call deco。其它为准备工作。
def deco(func):
def in_deco():
print('in deco')
func()
print('call deco')
@deco 1
def bar():
print('in bar')
进一步解释:
def deco(func):
def in_deco():
print('in deco')
func()
print('call deco')
return in_deco
@deco 1
def bar():
print('in bar')
bar() 2
1.调用deco,func=bar,继续执行该函数中语句(除去闭包)输出call deco,返回in_deco给bar,即bar=in_deco就到2了
2.调用bar,由1得到bar=in_deco,调用in_deco函数,输出in deco,继续执行该函数中语句,调用fun函数,由1fun=bar调用bar输出in bar。
进一步解释参数调用
def deco(func):
def in_deco(x,y):
print('in deco')
func(x,y)
print('call deco')
return in_deco
@deco
def bar(x,y):
print('in bar',x+y)
bar(1,2)
如果想给bar传达参数,因为bar是in_deco返回的所有给in_deco加参数,同样fun调用,所有给fun添加参数。
- Python装饰器翻译慕课网
- python装饰器装饰类
- [python]python装饰器
- Python装饰器学习
- Python装饰器
- python 装饰器
- Python装饰器
- python 装饰器 应用
- python 装饰器2
- Python装饰器学习
- python装饰器
- python装饰器
- python 装饰器入门
- python装饰器
- python装饰器
- python 装饰器'@'
- python装饰器
- Python装饰器详解
- spring aop 两种配置方式
- linux实验楼学习笔记2
- 自定义view实现图片加影子的效果
- 一站式学习Wireshark
- JSP向Servlet传值无效(为空)
- Python装饰器翻译慕课网
- Webpack2 完整踩坑教程(四)
- springboot-cloud-1-eureka
- 笔试题 2(超多的题,一小时内完成)
- Android源码学习——linker(3)
- 【复习笔记】数据库的五种隔离级别
- POJ
- 测试分类
- centos下搭建jenkins自动打包功能--Android