zoukankan      html  css  js  c++  java
  • 通过例子来理解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

  • 相关阅读:
    js中return;、return true、return false;区别
    JS跨域设置和取Cookie
    检测到在集成的托管管道模式下不适用的ASP.NET设置的解决方法(转)
    IIS7中Ajax.AjaxMethod无效的原因及解决方法
    ajax 跨域的问题 用js绕过跨域
    微服务笔记
    smali语法笔记
    Go Micro 入门笔记
    介绍微服务框架Micro笔记
    JS任务队列--笔记
  • 原文地址:https://www.cnblogs.com/christychang/p/6550507.html
Copyright © 2011-2022 走看看