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

之前学过c 这段python可不可以这样理解

#给出的错误答案
# 希望一次返回3个函数,分别计算1x1,2x2,3x3:
def count():
    fs = []
    for i in range(1, 4):
    #上面这个i并不会因为count函数的结束而回收内存,值也会一直保存,
    #这个i只有count函数内才可以访问,即使是在只调用count里的内层函数时
        def f():
            return i*i 
            #这里的i是是指向第四行创建的i的地址
            #并不是创建了新的一块内存空间
        fs.append(f)
    return fs

f1, f2, f3 = count()

#给出的标准答案
def count():
    fs = []
    for i in range(1, 4):
        def f(j):
        #每次运行都为j创建一块新的内存,并保存传来的值,且所有的都不会被销毁
            def g():
                return j*j
                #这个j指向运行f函数时创建j的内存地址
            return g
        r = f(i)
        #运行f函数返回g函数,返回的g中j都是指向(当前运行f时新创建的的内存)
        #每个g函数都是不一样的
        fs.append(r)
    return fs
f1, f2, f3 = count()
print f1(), f2(), f3()


正在回答

2 回答

我来说一下我的理解,,从你上面代码的12行,fs.append(f),这个f是一个变量名,也就是一个指针,而函数的指针是从函数创建开始就不会变的,当第一次循环,fs.append(1),添加到list里面的数值是1,当第二次,第三次调用的时候,fs.append(f)会将前几次的值全部覆盖,因为添加的是一个指针,这个函数指针又开始访问函数,所以返回的都是9

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

可以的

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

举报

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

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

进入课程

之前学过c 这段python可不可以这样理解

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

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

帮助反馈 APP下载

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

公众号

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