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

为啥举例的结果是三个九

在这一节纠结了半天

def count():
    fs = []
    for i in range(1, 4):
        def f():
             return i*i
        fs.append(f)
    return fs

f1, f2, f3 = count()
哪位大神能否再讲解的细致一些


正在回答

1 回答

个人理解如下,带‘测’字的是自己在理清运行过程时加的

def count():   

    fs = []

    for i in range(1, 4):

        def f():

            #测:print('i的值:',i)

            return i*i

        #测 :print(f, i)

        fs.append(f)

        #上面这一句追加语句append,只是把名为f的这三个不同的函数依次放进fs里边存着,

        #根本没有去调用f这个函数,所以f里边的语句永远不会执行

        #而这个for循环结束的时候,i已经增长为3,

        #所以在下面调用f函数,即f1()或f2()或f3()这种形式时,f里边的语句才开始被执行

        #而进入f函数里边的这个i的值一直就是之前for循环结束时的3,所以最后结果才会出现三个9

    return fs

f1,f2,f3 = count()

#测 :print(f1(),f2(),f3())或直接f1()

#在调用f1时,即f1()这种形式,才会有数值显示

#但是,此时的值全部都是9,而不是1,4,9

#因为当count()函数返回了3个函数时,这三个函数引用的变量i的值已经是3了,

#f1,f2,f3 = [f(),f(),f()]是三个不同的f,在内存中的存储位置都不同


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

举报

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

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

进入课程

为啥举例的结果是三个九

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