【发布时间】:2014-01-29 23:55:47
【问题描述】:
我想尝试使用匿名函数,所以我决定制作一个简单的素数查找器。这里是:
tests = []
end = int(1e2)
i = 3
while i <= end:
a = map(lambda f:f(i),tests)
if True not in a:
tests.append(lambda x:x%i==0)
print i
print tests
print "Test: "+str(i)
print str(a)
i+=2
然而,我发现lambda x:x%i==0 中的i 每次都被访问,而我希望它是一个文字数字。我怎样才能让它变成lambda x:x%3==0?
【问题讨论】:
-
另见These Nasty Closures 以获得比官方文档中更好的解释。但简短的版本是这些测试函数中的每一个实际上都是围绕同一个变量
i的闭包,并且i不断变化的值。 (这不太准确,因为全局变量实际上并不需要存储在闭包中,但效果是一样的。)