• 手机版

    扫码体验手机版

  • 微信公众号

    扫码关注公众号

国内首家协议开发

软芯音视解码保护平台

在线
客服

发布
需求

在线
聊天

天盟
APP

天盟APP下载

关注
微信

微信扫一扫访问
顶部

这样的代码执行后fs=[f(1),f(2),f(3)]吗

def count():    fs = []    for i in range(1, 4):        def f(j):            def g():                return j*j            return g        r=f(i)        fs.append(r)    return fsf1,f2,f3=count()print f1(), f2(), f3()

免责声明:本内容仅代表回答会员见解不代表天盟观点,请谨慎对待。

版权声明:作者保留权利,不代表天盟立场。

使用道具 举报

全部参与1

闭包问题,首先,你得先明白在python里面,一切皆对象,函数也是一个对象。
在函数这个对象里面有一个特殊的属性,那就是__closure__,这是函数的一个闭包属性(姑且这么叫吧),用来存储其引用的外层函数的变量,该属性在定义的时候创建,而不是执行时。看图
035004rq6ck1mzz9lo3joc.jpg
然后再理解一下代码应该没多大问题了
defcount():fs=[]foriinrange(1,4):deff(j):defg():#return__closure__[0].cell_contents*__closure__[0].cell_contentsreturnj*jreturng#执行f(i)返回创建函数g返回,此时g.__closure__[0].cell_contents存储的就是i的值#[g.__closure__[0].cell_contents=1,g.__closure__[0].cell_contents=2,g.__closure__[0].cell_contents=3]r=f(i)fs.append(r)returnfsf1,f2,f3=count()printf1(),f2(),f3()水平有限,只能解释成这样了。

使用道具 举报

发新帖

发布任务需求已有1031167位用户正在使用天盟网服务

发布分类: *
任务预算: *
需求内容: *
手机号码: *
任务商家报价为
  • 预算价 :
  • 成交价 :
  • 完工期 :
  • 质保期 :

* 最终任务项目以服务商报价、双方协商为准!