zoukankan      html  css  js  c++  java
  • python中闭包的理解

    闭包的三个条件:

    1、函数(外函数)中定义了内函数;2、内函数使用了外函数的非全局变量;3、外函数最终返回的是内函数的引用。

    简单闭包事例:

    #outerfunc为外函数
    def outerfunc(x):
        y = 10     #x,y都是外函数的非全局变量
    
        #innerfunc是内函数
        def innerfunc():
    
            #内函数使用了外函数的非全局变量
            return x * y
    
        #外函数最终返回的是内函数的引用
        return innerfunc

    然后执行如下代码:

    func = outerfunc(2)

    func()

    输出 20

    因为外函数最终返回的是内函数的引用,所以变量func为内函数innerfunc的引用,

    func(),变量后面加了括号,则是执行内函数,所以最终结果为20。

    再看下面的例子:

    def outerfunc(x):
    
        def innerfunc(y):
    
            return x * y
    
        return innerfunc
    
    
    
    
    func = outerfunc(2)
    print(func(3))
    print(func(4))

    输出结果分别为6和8

    print(func(3)):因为func是内函数的引用,参数2是外函数的变量,被内函数使用,而func(3)执行的是内函数,3是传给内函数的参数,所以结果为6

    print(func(4))也是同样的道理。

    上面的代码改下,如下:

    def outerfunc(x):
    
        def innerfunc(y):
    
            return x
    
        return innerfunc
    
    
    
    
    func = outerfunc(2)
    print(func(3))
    print(func(30))

    上面输出都是2

    因为内函数只用到了外函数的变量

    以上是本人的理解,有误望谅解,欢迎指正。

  • 相关阅读:
    redis-trib.rb命令详解
    Azure 网站上的 Java
    好消息
    Microsoft Azure 上的自定义数据和 Cloud-Init
    关于虚拟机的博客
    cocos2dx CCControlSlider
    cocos2dx CCControlSwitch
    cocos2dx CCEditBox
    cocos2dx CCTextFieldTTF
    cocos2dx 字体BMFont,Atlas
  • 原文地址:https://www.cnblogs.com/qk2014/p/9085524.html
Copyright © 2011-2022 走看看