为了账号安全,请及时绑定邮箱和手机立即绑定

闭包的讨论

老师能解释一下 为什么不能写成这样 def count():    fs = []    for i in range(1, 4):        def f(j):            return j*j        r = f(i)        fs.append(r)    return fs print count() [1, 4, 9] #反回 [1, 4, 9] #正确返回1 4 9 老师写的也我能理解,但是两种结构区别不理解 为什么一个返回 list 一个返回3个数值

正在回答

4 回答

def count():
    fs = []
    for i in range(1, 4):
        def f(j):
            return j*j
        r = f(i)
        fs.append(r) #r是函数f()计算后的返回值,是int型对象,所以fs当然是一个有3个整数的list
    return fs
print count()
def count():
    fs = []
    for i in range(1, 4):
        def f(j):
            def g():
                return j*j
            return g
        r = f(i) #r是g()的闭包
        fs.append(r) #fs存的将是g()闭包的三个实现,分别是在输入为1,2,3的时候
    return fs
f1, f2, f3 = count() #f1,f2,f3就是这三个闭包
print f1(), f2(), f3() #加()后就是函数的求值,所以f1()就相当于call g(1),返回值就是1,f2()就相当于call g(2),返回值就是4等

希望对你有帮助

5 回复 有任何疑惑可以回复我~
#1

ATCUAU 提问者

感谢 大神 !
2015-04-13 回复 有任何疑惑可以回复我~
#2

bryan4it

第二个里:g 是 f 的闭包,f 是 count的闭包???
2015-08-15 回复 有任何疑惑可以回复我~

当初的理解就是同样一个函数调用..结果确是不一样的...让我在点郁闷...之前看过点汇编知识..貌似有寄存器什么现场保护什么的..不是很清楚..大概是一个函数运行参数什么的也会保存恢复...想到这个貌似就理解了点...貌似不单单只是一个函数地址的问题...是不是python保存一个函数地址的时候还wf 把当时运行的环境保存了...之前C里面函数地址..貌似不是这样的...还得负责传参数...

0 回复 有任何疑惑可以回复我~
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 fs
f1, f2, f3 = count()
print f1(), f2(), f3()

1 4 9


0 回复 有任何疑惑可以回复我~
def count():
    fs = []
    for i in range(1, 4):
        def f(j):
            return j*j
        r = f(i)
        fs.append(r)
    return fs
print count()

[1, 4, 9]


0 回复 有任何疑惑可以回复我~
#1

ATCUAU 提问者

代码如下 ,忘记用代码格式了。 老师能详细说下和下面代码区别在哪 该怎么理解 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 fs f1, f2, f3 = count() print f1(), f2(), f3() 1 4 9
2015-04-13 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
python进阶
  • 参与学习       255665    人
  • 解答问题       2949    个

学习函数式、模块和面向对象编程,掌握Python高级程序设计

进入课程

闭包的讨论

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信