【发布时间】:2017-03-08 11:41:02
【问题描述】:
我用python写了一些代码来获取一些素数:
N = (x for x in range(2,100))
while i<50:
n = next(N)
print(n)
N = filter(lambda x:x % n > 0,N)
i = i+1
我认为它应该打印素数 2,3,5,7,11.... 但结果是 2,3,4,5,6,7... 就像过滤器不起作用一样。 我想可能是 lambda 的问题,它没有成功提供 n 的值,所以我只是将我的代码更改为这些:
def fil(n):
return lambda x:x % n > 0
N = (x for x in range(2,100))
i = 0
while i<50:
n = next(N)
print(n)
N = filter(fil(n),N)
i = i+1
有效。
但我仍然怀疑,所以我写了这些:
N = (x for x in range(2,100))
i = 0
while i<50:
n = next(N)
print(n)
N = filter(lambda x:x % n == 0,N)
i = i+1
刚刚将 lambda x:x % n > 0 更改为 lambda x:x % n==0。其他部分相同。这次它起作用了,给了我 2^x: 2,4,8,16,32... 过滤器起作用了。
这真的让我很困惑。如何解释/理解这一点?
【问题讨论】:
-
旁注:
N = (x for x in range(2,100))是编写N = iter(range(2, 100))的一种不必要的手动方式。后者将是 CPython 上的 C 级迭代器,前者执行字节码以生成每个值。
标签: python python-3.x