"Python"学习笔记----装饰器
来源:互联网 发布:韩国美女直播软件app 编辑:程序博客网 时间:2024/05/16 07:28
一、函数的作用域
LEGR: L>E>G>B
L: local 函数内部作用域
E: Enclosing 函数内部与嵌套函数之间 (闭包)
G:global 全局作用域
B:Build-in 内置作用域
passline=60def f(a): if a>=passline: print ('pass') else: print('failed')f(80)
这里a的局部变量即L,passline就是全局变量即G。
二、闭包
函数的实质:
- 函数是一个变量
- 函数执行完成后内部变量回收
- 函数属性
- 函数返回值
eg:
举一个学生成绩的例子,当总分为100时,60分及格,当总分为150时,90分及格。
def fun(set_passline): def in_fun(value): if value>set_passline: print ('pass') else: print ('faild') return in_funfun_100=fun(60)fun_150=fun(90)fun_100(80)fun_150(80)
这里fun_100和fun_150均是函数,实现了代码的复用。
闭包的作用:
- 封装
- 代码复用
def sum1(*arg): return sum(arg)def average1(*arg): return sum(arg)/len(arg)def fun(func): def in_fun(*arg): print ('in_fun arg=',arg) if len(arg)==0: return 0 for val in arg: if not isinstance(val,int): #判断参数是否为int,防止报错 return 0 return func(*arg) return in_funsum1=fun(sum1)average1=fun(average1)print (sum1(1,2,3,4,5))print (sum1(1,2,3,4,'5'))print (average1(1,2,3))print (average1(1,2,'3'))
以上这段代码也使用了闭包,实现了代码复用,并且进行了封装。
三、装饰器
- 装饰器用来装饰函数
- 返回一个函数对象
- 被装饰的标识符指向返回的函数对象
- 语法糖 @demo
def deco(fun): def in_deco(): print ('in_deco') fun() print ('deco') return in_deco#语法糖@deco def bar(): print ('bar')
执行结果:
deco
语法糖的实质就是进行了一次函数调用,即执行bar=deco(bar),
此时bar的值为in_deco,类型为function。
有参数的装饰器参数要一致:
def deco(fun): def in_deco(x,y): print ('in_deco') fun(x,y) print ('deco') return in_deco@decodef bar(x,y): print ('bar',x+y)bar(1,2)
结果为(3)。
以上就是装饰器的内容。
0 0
- Python装饰器学习笔记
- Python学习笔记:装饰器
- python装饰器学习笔记
- Python学习笔记--装饰器
- Python装饰器学习笔记
- Python学习笔记-装饰器
- Python 装饰器 学习笔记
- "Python"学习笔记----装饰器
- 【Python学习笔记】装饰器
- python学习笔记-装饰器
- python装饰器学习笔记
- python装饰器学习笔记
- Python学习笔记----装饰器
- 【python学习笔记】Python装饰器
- Python 学习笔记之装饰器
- Python学习笔记 装饰器详解
- python装饰器的学习笔记三
- python装饰器的学习笔记二
- 分类战车SVM全系列
- 手机号中间几位为*号
- Android最好看的圆形进度条ProgressBar
- iOS学习(三十二)简单的登陆界面保存用户名到home,下次启动并显示出来
- nginx之负载均衡
- "Python"学习笔记----装饰器
- java简单实现二叉树插入和遍历
- Javascript Browser Window对象方法详解
- NYOJ 123 树状数组 (区间更新,单点访问)/(插线问点)
- linux下vim中文乱码的解决方法
- UVa 11992 Fast Matrix Operations
- easyui datagrid 设置可编辑行
- jdbc加载驱动 Class.forName()的作用
- ubuntu的一些使用技巧