全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 python论坛
720 1
2017-09-03
flist = []  
for i in range(3):     
     def foo(x): print x + i  
     flist.append(foo)     
  
for f in flist:  
     f(2)  
  
上面这段代码的输出是4,4,4。是因为函数f加入到flist列表里时,i还未被赋值,只是当执行的时候才去找i的值,而第一个for循环结束后,i为2,所以最终输出都是4。  
但是如果把代码修改如下,输出就变为2,3,4。这是为什么? 函数加入flist列表时,i应该同样也未被赋值,导致y也并未被赋值,而是要等到第二个for循环时才计算i和y吧? 请大家指点,谢谢!  
  
flist = []  
for i in range(3):     
     def foo(x,y=i): print x + y  
     flist.append(foo)     
  
for f in flist:  
     f(2)  
  
--
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2017-9-3 16:53:19
每个循环中的y是不一样的东西,赋值生成新的变量  
    
     flist = []  
     for i in range(3):    
         def foo(x): print x + i  
         flist.append(foo)    
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群