1
SingeeKing 2017-08-04 10:10:04 +08:00
首先你确定 def 和 print 不是在两行吗
|
2
SingeeKing 2017-08-04 10:10:40 +08:00
好吧什么时候改了。。。
那么,你确定第二行没有缩进吗。。。 |
3
SingeeKing 2017-08-04 10:22:29 +08:00 3
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 2
~~依赖缩进的语言 遇到了 缩进不好使的网站。。(逃
|
6
Readme16 2017-08-04 10:33:28 +08:00 via iPhone 1
三楼正解,另如果 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)] |