鱼C论坛

 找回密码
 立即注册
查看: 1763|回复: 5

[已解决]一段很神奇又难理解的代码

[复制链接]
发表于 2017-1-23 21:37:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
在实验楼看到的一个问题。
def create_multipliers():
        return [lambda x : i * x for i in range(5)]
for multiplier in create_multipliers():
        print multiplier(2)
这段代码执行结果是 8 8 8 8 8 这个我能理解。
然后坐着给了一个方案如下
def create_multipliers():
        return [lambda x, i=i : i * x for i in range(5)]
for multiplier in create_multipliers():
        print multiplier(2)
这段执行结果就是0 2 4 6 8
但是,i=i那里有点不明白是怎么实现的。难道是因为i每次增加1,然后从“外部”对自己再一次赋值?‘
谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-1-23 22:11:35 | 显示全部楼层
有原帖不?? 贴下看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-1-23 22:17:29 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-24 11:03:42 | 显示全部楼层
可以去学习一下,感觉这学习的论坛有好多哦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-24 11:26:39 | 显示全部楼层    本楼为最佳答案   
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-24 11:40:46 | 显示全部楼层


将 lambda 单独定义即可,这样清晰易懂~
  1. >>> def dbl(i=2):
  2.         return lambda x:i*x

  3. >>> def create_multipliersX():
  4.         return [dbl(x) for x in range(5)]

  5. >>> for multiplier in create_multipliersX():
  6.         print (multiplier(2))

  7.        
  8. 0
  9. 2
  10. 4
  11. 6
  12. 8
  13. >>>
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-23 19:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表