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

热评第二 代码无法运行?

s.append(f),只是将每一个f()的引用保存进了list,并没有进行对于i的计算,所以导致最后在运行了f(1)之后,i已经变为了3,所以会一样结果都为9.只要将这里改为fs.append(f())即可,这样就在这一步的时候已经进行了i*i的运算,将结果保存了,通过这一题可以注意到在python这门语言之中,f与f()的大区别。


按照 热评第二 的说法,

def count():
   fs = []
   for i in range(1, 4):
       def f():
            return i*i
       fs.append(f())     #仅修改此处
   return fs

f1, f2, f3 = count()

print f1(),f2(),f3()


运行结果为TypeError: 'int' object is not callable

正在回答

4 回答

代码应该是错的,f()函数在循环体内已经被计算,所以添加到 fs里面的不是未运行的函数而是具体数值,所以最后一行不需要再去调用函数f1(),f2(),f3(),而是直接输出f1,f2,f3数值就好 

def count():
   fs = []
   for i in range(1, 4):
       def f():
            return i*i
       fs.append(f())     #仅修改此处
   return fs

f1, f2, f3 = count()

print f1,f2,f3 #修改


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

def count():

    fs = []

    for i in range(1, 4):

        def f(i=i):

            return i*i

        fs.append(f)

    return fs

f1, f2, f3 = count()

print f1(), f2(), f3()


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

LNYIE 提问者

你又把一个答案拉过来啦,你这个代码我看明白了,我是对热评第二的原理不了解,运行错误。
2017-12-26 回复 有任何疑惑可以回复我~

python3下运行

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

LNYIE 提问者

https://c.runoob.com/compile/9 在线python3工具运行还是错误。 def count(): fs = [] for i in range(1, 4): def f(): return i*i fs.append(f()) return fs f1, f2, f3 = count() print f1(),f2(),f3()
2017-12-26 回复 有任何疑惑可以回复我~

def count():

   fs = []

   for i in range(1, 4):

       def f(i=i):

            return i*i

       fs.append(f)     #仅修改此处

   return fs


f1, f2, f3 = count()

print(f1(),f2(),f3())


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

LNYIE 提问者

你这个是相当于把i赋值给了新的i吗? 类似于热评第一的m=i ,我现在是对热评第二的fs.append(f()) 有疑问,我照着热评第二的说法,运行错误。
2017-12-26 回复 有任何疑惑可以回复我~

举报

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

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

进入课程

热评第二 代码无法运行?

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

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

帮助反馈 APP下载

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

公众号

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