为了账号安全,请及时绑定邮箱和手机立即绑定

python装饰器

难度初级
时长43分
学习人数
综合评分9.67
219人评价 查看评价
9.9 内容实用
9.6 简洁易懂
9.5 逻辑清晰
  • 函数也是对象。在定义f_60(f_60 = set_passline(60))的时候实际上是定义了变量passline值为60的test函数对象。 执行f_60(85),就是执行passline值为60,score值为85的test函数对象 一切皆对象。 def set_passline(passline): def test(score): if score >= passline: print "pass" else: print "faile" return test f_60 = set_passline(60) f_90 = set_passline(90) f_60(85) f_90(85)
    查看全部
  • L->E->G->B
    查看全部
  • 主要内容
    查看全部
  • LEGB
    查看全部
  • LEGB
    查看全部
  • python3?
    查看全部
  • LEGB
    查看全部
  • 谢谢
    查看全部
  • 装饰器就是对闭包的使用: #coding:utf-8 def deco(func): #1、 def in_deco(x,y): print('in deco') func(x,y) #3、 print('call deco') #0、 return in_deco #1、 #1、将bar函数传入deco()中,即deco(bar),这里返回了in_deco #2、bar = in_deco #3、in_deco中执行到最后一句,使用到bar函数 @deco #会执行代码,将其下面的函数传进去,相当于调用了bar = dec(bar) def bar(x,y): print("in bar",x+y) print(type(bar)) bar(2,4) 输出: call deco <class 'function'> in deco in bar 6
    查看全部
    0 采集 收起 来源:python装饰器

    2018-03-22

  • 函数调用顺序:(点击编辑查看) #coding:utf-8 def my_sum(*arg): #3、 print('my_sum') return sum(arg) def my_average(*arg): print('my_average') return sum(arg)/len(arg) def dec(func): def in_dec(*arg): #闭包 1、 print('in_dec()=',arg) if len(arg) == 0: return 0 for val in arg: if not isinstance(val, int): return 0 return func(*arg) #2、 return in_dec #2、 my_sum = dec(my_sum) #1、dec函数返回in_dec -> my_sum #2、my_sum = in_dec(*arg) print(my_sum(1,2,3,4,5)) print(my_sum(1,2,3,4,5,'6')) 打印结果: in_dec(*arg)= (1, 2, 3, 4, 5) my_sum 15 in_dec(*arg)= (1, 2, 3, 4, 5, '6') 0
    查看全部
  • 函数实质与属性 #定义:如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure) 分解来说,包含下面3个条件: 1) 需要函数嵌套, 就是一个函数里面再写一个函数. 2) 外部函数需要返回一个内部函数的引 3) 外部函数中有一些局部变量, 并且, 这些局部变量在内部函数中有使用 一些概念: 1)自由变量: 外部函数中定义的局部变量, 并且在内部函数中被使用 2) 闭包: 那个使用了自由变量并被返回的内部函数就称为闭包 #支持闭包的语言有这样的特性: 1)函数是一阶值(First-class value),即函数可以作为另一个函数的返回值或参数,还可以作为一个变量的值 2)函数可以嵌套定义,即在一个函数内部可以定义另一个函数 #代码示例(点开编辑查看) #coding:utf-8 #闭包:实现封装,实现代码复用 def set_passline(passline): #passline = 60 def cmp(val): #cmp() -> 闭包 if val >= passline: print('pass') else: print("failed") return cmp f_100 = set_passline(60) #f_100是函数,也即返回的函数cmp f_150 = set_passline(90) f_100(89) f_150(89) 闭包会保留来自外围作用域变量的信息。 Python 中函数对象都拥有一个 __closure__ 属性。 __closure__ 对象返回一个由 cell 对象组成的元组,cell 对象记录了定义在外围作用域的变量信息。 对于那些不是闭包的函数对象来说,__closure__ 属性值为 None。
    查看全部
  • # -*- encoding:utf-8 -*- passline = 60 # 全局变量,作用域在global中 def func(val): passline = 90 # 局部变量,作用域在local中 if val >= passline: # val也是局部变量,作用域在local中 print ('pass') else: print ('failed') def in_func(): print(val) # 此处val作用域在enclosing中,在func()函数中找到了val值 in_func() def Max(val1, val2): return max(val1, val2) # max()为Python运行时自动导入的方法,作用域在build-in中 func(89) print (Max(89, 90))
    查看全部
  • 装饰器就是对闭包的使用: #coding:utf-8 def deco(func): #1、 def in_deco(x,y): print('in deco') func(x,y) #3、 print('call deco') #0、 return in_deco #1、 #1、将bar函数传入deco()中,即deco(bar),这里返回了in_deco #2、bar = in_deco #3、in_deco中执行到最后一句,使用到bar函数 @deco #会执行代码,将其下面的函数传进去,相当于调用了bar = dec(bar) def bar(x,y): print("in bar",x+y) print(type(bar)) bar(2,4) 输出: call deco <class 'function'> in deco in bar 6
    查看全部
    0 采集 收起 来源:python装饰器

    2018-03-22

  • 函数调用顺序:(点击编辑查看) #coding:utf-8 def my_sum(*arg): #3、 print('my_sum') return sum(arg) def my_average(*arg): print('my_average') return sum(arg)/len(arg) def dec(func): def in_dec(*arg): #闭包 1、 print('in_dec()=',arg) if len(arg) == 0: return 0 for val in arg: if not isinstance(val, int): return 0 return func(*arg) #2、 return in_dec #2、 my_sum = dec(my_sum) #1、dec函数返回in_dec -> my_sum #2、my_sum = in_dec(*arg) print(my_sum(1,2,3,4,5)) print(my_sum(1,2,3,4,5,'6')) 打印结果: in_dec(*arg)= (1, 2, 3, 4, 5) my_sum 15 in_dec(*arg)= (1, 2, 3, 4, 5, '6') 0
    查看全部
  • #定义:如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure) 分解来说,包含下面3个条件: 1) 需要函数嵌套, 就是一个函数里面再写一个函数. 2) 外部函数需要返回一个内部函数的引 3) 外部函数中有一些局部变量, 并且, 这些局部变量在内部函数中有使用 一些概念: 1)自由变量: 外部函数中定义的局部变量, 并且在内部函数中被使用 2) 闭包: 那个使用了自由变量并被返回的内部函数就称为闭包 #支持闭包的语言有这样的特性: 1)函数是一阶值(First-class value),即函数可以作为另一个函数的返回值或参数,还可以作为一个变量的值 2)函数可以嵌套定义,即在一个函数内部可以定义另一个函数 #代码示例(点开编辑查看) #coding:utf-8 #闭包:实现封装,实现代码复用 def set_passline(passline): #passline = 60 def cmp(val): #cmp() -> 闭包 if val >= passline: print('pass') else: print("failed") return cmp f_100 = set_passline(60) #f_100是函数,也即返回的函数cmp f_150 = set_passline(90) f_100(89) f_150(89) 闭包会保留来自外围作用域变量的信息。 Python 中函数对象都拥有一个 __closure__ 属性。 __closure__ 对象返回一个由 cell 对象组成的元组,cell 对象记录了定义在外围作用域的变量信息。 对于那些不是闭包的函数对象来说,__closure__ 属性值为 None。
    查看全部

举报

0/150
提交
取消
课程须知
您至少具备Python基础知识
老师告诉你能学到什么?
1.函数作用域及关系。 2.闭包的使用。 3.装饰器的概念及使用。

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!