• 通过例子来理解python闭包。


    闭包就是内部函数对enclosing作用域的变量进行引用。(可先参考python函数作用域LEGB

    通过一个例子体会

    def func_150(val):

             passline = 90

             if val >=passline:

                       print(‘%d pass’%val)

             else:

                       print(‘failed’)

    def func_100(val):

             passline = 60

             if val >=passline:

                       print(‘%d pass’%val)

             else:

                       Print(‘failed’)

    def set_passline(passline):  #passline=60

             def cmp(val):  #引用了enclosing作用域中的passline,将其填加到closure属性中,cmp就称为闭包

                       if val >=passline:

                                print(‘pass’)

                       else:

                                print(‘failed’)

                       return cmp

    f_100 = set_psssline(60)  #返回 cmp,f_100就是一个函数

    f_150 = set_passline(90)

    f_100(89)      #对f_100进行调用

    f_150(89)

    运行结果:

    pass

    failed

    闭包就是内置函数对enclosing作用域变量的使用,它会将变量放到closure属性中,当内部函数处理时会拿过来直接使用。

    作用:

    封装;

    代码复用。

    在闭包中引用函数,通过一个例子体会:

    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会放到enclosure属性中,之后可直接对my_sum函数进行引用

                       If len(arg) == 0:

                                Return 0

             For val in arg:

                       If not isinstance(val,int):

                                Return 0

                       Return func(*arg)

             Return in_dec

    My_sum = dec(my_sum)

    Print (my_sum(1,2,3,4,5))

    结果

    15

  • 相关阅读:
    Go反射原理
    并发控制--context篇
    Go并发控制--WaitGroup篇
    Go依赖管理--module
    正睿培训 8.4 学习笔记
    bitset
    7.18 学习笔记
    7.17 学习笔记
    P6835 [Cnoi2020]线形生物
    UVA11300 Spreading the Wealth 思维题
  • 原文地址:https://www.cnblogs.com/christychang/p/6550507.html
Copyright © 2020-2023  润新知