这个参考代码里的j不也是在变么
这个参考代码里的j不也是在变么,为什么不会像讲解的那样跟用i时一样呢
这个参考代码里的j不也是在变么,为什么不会像讲解的那样跟用i时一样呢
2018-08-01
# -*- coding:utf-8 -*- def count(): fs = [] for i in range(1, 4): def f(j): def g(): print 'j=',j,'now' return ‘result=',j*j return g r = f(i) fs.append(r) return fs f1, f2, f3 = count() print '此行表示以下的输出都在f1,f2,f3被调用时产生:' print f2(),'\n',f1(),'\n', f3(),'\n'
这段程序跟参考代码比改变了第1行(为了将后面的汉字打出来),第7行(输出此次调用的j值),第8行,第15行(表示打印出的结果都是在调用函数后产生的),第16行(加\n是为了把各个函数的结果隔开,将f2()放到了最前面,表明j的值是被固定在函数结果里的)。
输出结果:
这个结果说明,在每一轮for循环中,当函数f(j)【j=i,i为具体数值而非变量】把g返回给r的时候,此时i赋给j的值已经被‘锁死’在g里了。
即,最终加入到fs中的不是三个【j*j】,而是【j=i=1 j*j】、【j=i=2 j*j】和【j=i=3 j*j】。
不知道这个结果是不是与j是局部变量有关?
因为本人也是小白,只能从外围现象来猜测原因,期待有大神可以从python内部来进行解答:)
举报