最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

关于Python中LEGB与闭包以及装饰器的具体讲解

来源:动视网 责编:小采 时间:2020-11-27 14:23:23
文档

关于Python中LEGB与闭包以及装饰器的具体讲解

关于Python中LEGB与闭包以及装饰器的具体讲解:这篇文章主要介绍了详解 Python中LEGB和闭包及装饰器的相关资料,主要介绍了函数作用域和闭包的理解和使用方法及Python中的装饰器,需要的朋友可以参考下详解 Python中LEGB和闭包及装饰器LEGB L>E>GBL:local函数内部作用域E:enclosing
推荐度:
导读关于Python中LEGB与闭包以及装饰器的具体讲解:这篇文章主要介绍了详解 Python中LEGB和闭包及装饰器的相关资料,主要介绍了函数作用域和闭包的理解和使用方法及Python中的装饰器,需要的朋友可以参考下详解 Python中LEGB和闭包及装饰器LEGB L>E>GBL:local函数内部作用域E:enclosing


这篇文章主要介绍了详解 Python中LEGB和闭包及装饰器的相关资料,主要介绍了函数作用域和闭包的理解和使用方法及Python中的装饰器,需要的朋友可以参考下

详解 Python中LEGB和闭包及装饰器

LEGB L>E>G?B

  • L:local函数内部作用域

  • E:enclosing函数内部与内嵌函数之间

  • G:global全局作用域

  • B:build-in内置作用域

  • python 闭包

    1.Closure:内部函数中对enclosing作用域变量的引用

    2.函数实质与属性

  • 函数是一个对象

  • 函数执行完成后内部变量回收

  • 函数属性

  • 函数返回值

  • passline = 60
    def func(val):
     if val >= passline:
     print ('pass')
     else:
     print ('failed')
     def in_func():
     print (val)
     in_func()
     return in_func
    
    f = func(89)
    f()
    print (f.__closure__)

    一般情况

    def f_100(val):
     passline = 60
     if val >= passline:
     print ('pass')
     else:
     print ('failed')
    
    def f_150(val):
     passline = 90
     if val >= passline:
     print ('pass')
     else:
     print ('failed')
    
    f_100(89)
    f_150(89)

    闭包

    def set_passline(passline):
     def cmp(val):
     if val >= passline:
     print ('Pass')
     else:
     print ('failed')
     return cmp
    
    f_100 = set_passline(60)
    f_150 = set_passline(90)
    f_100(89)
    f_150(89)

    Closure:内部函数中对enclosing作用域变量的引用,它会将enclosing作用域变量传递到内部函数的closure中

    闭包的作用:

  • 封装

  • 代码复用

  • python闭包二

    求和

    def my_sum(*arg):
     if len(arg) == 0:
     return 0
     for val in arg:
     if not isinstance(val,int): # 有一个非int则返回0
     return 0
     return sum(arg)
    
    def my_average(*arg):
     if len(arg) == 0:
     return 0
     for val in arg:
     if not isinstance(val,int): # 有一个非int则返回0
     return 0
     return sum(arg)/len(arg)
    
    print (my_sum(1,2,3,4,5))
    print (my_sum(1,2,3,4,5,'6'))
    print (my_aveage(1,2,3,4,5))
    print(my_average())

    闭包的使用

    def my_sum(*arg):
     return sum(arg)
    def my_average(*arg):
     return sum(arg)/len(arg)
    
    def dec(func):
     def in_dec(*arg): # my_sum
     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) # 闭包,存在于in_dec函数中的__closure__中,所以可以调用
     return in_dec
    
    my_sum = dec(my_sum) # 传参
    
    print(my_sum (1,2,3,4,5))
    print(my_sum (1,2,3,4,5,'6'))
    # my_sum就是in_dec函数,会先执行参数类型判断,然后执行__closure__中的函数my_sum

    python 装饰器

    1. 装饰器用来装饰函数

    2. 返回一个函数对象

    3. 被装饰函数标识符指向返回的函数对象

    4. 语法糖 @deco

    使用装饰器的方式

    def dec(func):
     def in_dec(*arg): # my_sum
     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) # 闭包,存在于in_dec函数中的__closure__中,所以可以调用
     return in_dec # 如果没有返回值,则my_sum调用装饰器后为None
    # my_sum = dec(my_sum) # 不手动传参
    @dec # 装饰器将my_sum作为参数传入dec,并返回一个新的函数赋值给my_sum
    def my_sum(*arg):
     return sum(arg)
    def my_average(*arg):
     return sum(arg)/len(arg)
    print(my_sum (1,2,3,4,5))
    print(my_sum (1,2,3,4,5,'6'))

    另一个例子

    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)

    文档

    关于Python中LEGB与闭包以及装饰器的具体讲解

    关于Python中LEGB与闭包以及装饰器的具体讲解:这篇文章主要介绍了详解 Python中LEGB和闭包及装饰器的相关资料,主要介绍了函数作用域和闭包的理解和使用方法及Python中的装饰器,需要的朋友可以参考下详解 Python中LEGB和闭包及装饰器LEGB L>E>GBL:local函数内部作用域E:enclosing
    推荐度:
    标签: 装饰 python 装饰器
    • 热门焦点

    最新推荐

    猜你喜欢

    热门推荐

    专题
    Top