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

j的值是哪里来的

为什么f(j)里面的j默认是1啊

正在回答

3 回答

fs.append(f)这里加到fs[]中的f是指向f()这个函数的对象,到f1,f2,f3 = count()这个语句执行时,
即为f1,f2,f3 = f(),但是此时for循环已经执行完成,i=3,此时调用函数f(),f1,f2,f3 = 9,9,9.
可参照前面一节,返回函数,了解一下f和f()的区别
而传入r的时候,r是具体的值,且每次循环时r的值都不同,故返回1,4,9.


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

这个我也不太确定。我的理解是:count()返回了一个list,这个list由三个f函数构成。所以

f1, f2, f3 = count()

应该是f1= f 之类的赋值。然后在执行print f()语句时,调用并执行了f函数,返回了 i*i(此时i=3)。所以便是9 9 9了。

而1 4 9代码则是中的count()返回的是一个由f(1),f(2),f(3)返回的g函数。这样执行f1()时,g中的j应该就是f(1)传入的1。如果是这样那返回的就是1*1了。

(个人观点·····orz)

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

应该不是默认为1。我觉得应该是:f(j)中j的值是通过r = f(i) 传过去的。在第一次for循环中,i=1,通过r = f(i)调用f()函数,并传入参数i=1。也许这样的代码好理解一点。

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

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

慕姐2004059 提问者

谢谢你,这个j懂了,但是我还是不懂999和1,4,9代码的本质区别
2018-06-03 回复 有任何疑惑可以回复我~

举报

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

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

进入课程

j的值是哪里来的

我要回答 关注问题
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号