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

j没有被赋初值啊?

j没有被赋初值啊?怎么运行的?

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 回答

j只是形参,是调用的时候,传进去的。r = f(i)

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

西边 提问者

非常感谢!
2016-12-25 回复 有任何疑惑可以回复我~
#2

Chaelin

请问这个形参为什么不会在运行时随着i一起变化啊,就是为什么不会像i那样都运行为g(3)
2017-02-04 回复 有任何疑惑可以回复我~
#3

laxian 回复 Chaelin

def g(): return 1*1; 。 同理f(2)返回的g是: def g(): return 2*2; 。 其他同理。 再看看函数g的声明时间: i==1时,声明第一个函数g, i==2时,声明第二个函数g, i==3时,声明第三个函数g。 三个函数g不是同一时间声明的,声明的当时i值是不一样的。当声明以后,i值得变化不能改变已声明的函数。为了区别,我们把第i个函数g叫做gi。 在一次循环中,函数赋值链是 r=f(i)=g。等价于r=g,每次r被加入到数组。最后的调用f1(),f2(),f3(),相当于g1(),g2(),g3()。
2017-03-07 回复 有任何疑惑可以回复我~

举报

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

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

进入课程

j没有被赋初值啊?

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