![]() | 1 SingeeKing PRO 首先你确定 def 和 print 不是在两行吗 |
![]() | 2 SingeeKing PRO 好吧什么时候改了。。。 那么,你确定第二行没有缩进吗。。。 |
![]() | 3 SingeeKing PRO ![]() mul() 返回的应该是一个列表 [lambda x: 3 * x, lambda x: 3 * x, lambda x: 3 * x, lambda x:3 * x] 因为匿名函数存储在列表中仅存储了地址,四次拷贝为浅拷贝,之后就是改变了 i 的值,因此四个元素一同改变 最终返回结果 [6, 6, 6, 6] (以上都是我瞎说的) |
4 besto 2017-08-04 10:23:41 +08:00 |
![]() | 5 araraloren 2017-08-04 10:33:25 +08:00 ![]() ~~依赖缩进的语言 遇到了 缩进不好使的网站。。(逃 |
![]() | 6 Readme16 2017-08-04 10:33:28 +08:00 via iPhone ![]() 三楼正解,另如果 return (lambda x:x*i for i in range(4)) 那么输出的是[0,2,4,6] |
![]() | 7 skadi 2017-08-04 10:41:31 +08:00 缩进语言怎么面向 ctrlC 编程?:) |
![]() | 8 altboy OP @SingeeKing 有缩进 |
9 fengzixu 2017-08-04 16:59:57 +08:00 http://littledriver.net/2017/03/05/%E5%B7%A5%E4%BD%9C%E4%B8%AD%E8%B8%A9%E8%BF%87%E7%9A%84%E7%9A%84%E5%9D%91%E4%B9%8Bgolang%E7%9A%84%E4%B8%B4%E6%97%B6%E5%8F%98%E9%87%8F/ 在 golang 里面同样有这种问题,之前写过一个类似的博客。但是不知道,真正的原因是不是这样。总感觉是值都存在了同一个内存的位置 |
10 jiang42 2017-08-04 17:18:39 +08:00 via iPhone 是 free variable capture 的问题 fs = [lambda x: x*i for i in range(3)] i = 10 [f(1) for f in fs] [10, 10, 10] #6 楼的情况是返回了一个 generator,在 i 更新之前 lambda 就出来了 想把 i 锁在 lambda 里可以这么做 def bar(i): return lambda x:x*i def foo(): return [bar(i) for i in range(3)] |