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

我有些疑问,请大神指点一下

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

问题1:fs是一个list啊  返回的是一个list啊 为什么不能使用一个list变量接收,然后遍历呢?(不是指本题,我是说如果这么做的话)

问题2:f1()代表调用了count()  只不过换了个函数指向 我这么理解对吗?

问题3:我print fs 为什么都是空,为什么没有添加到fs中去呢?

求大神指点,菜鸟表示感谢!

正在回答

2 回答

首先我想说明的是,count()返回的fs[]存储的是g()在i为1,2,3时的函数名的地址

问题1:count()可以用list变量接收,可是遍历结果一样会是三个函数名的地址

问题2:f1()是调用了count(),也就是i为1的时候

问题3:应该是这里显示的问题,添加到fs列表的内容是函数地址,在python2中打印不出来,不过在python3中打印出来是f1是<function count.<locals>.f.<locals>.g at 0x0000022A37A22268>,也就是存储了函数的内存地址

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

慕标726199

对于 count()返回的fs[]存储的是g()在i为1,2,3时的函数名的地址,大神可以分析一下是如何实现的的么。为什么闭包情况,i不同下就可以将g返回成三个不同的函数,或是说,可以理解为返回的g地址各自映射的内容是未计算1*1,2*2,3*3,而不是变量i*i
2019-02-28 回复 有任何疑惑可以回复我~

感谢,稍微明白些了

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

举报

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

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

进入课程

我有些疑问,请大神指点一下

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