Python Ifilter与lambda表达式一起使用
我想知道如何将ifilter与lambda表达式正确地结合使用! 这是我的代码,目的是让素数小于1000Python Ifilter与lambda表达式一起使用,python,lambda,generator,Python,Lambda,Generator,我想知道如何将ifilter与lambda表达式正确地结合使用! 这是我的代码,目的是让素数小于1000 import itertools def _odd_iter(): n=1 while True: n=n+2 yield n def _not_divisible(n): return lambda x:x%n>0 def primes(): yield 2 it=_odd_iter() while
import itertools
def _odd_iter():
n=1
while True:
n=n+2
yield n
def _not_divisible(n):
return lambda x:x%n>0
def primes():
yield 2
it=_odd_iter()
while True:
n=next(it)
#it=itertools.ifilter(_not_divisible(n),it) #This would work
it=itertools.ifilter(lambda x:x%n>0,it) #This would not work
for n in primes():
if n<1000:
print(n)
else:
break
导入itertools
定义奇数iter():
n=1
尽管如此:
n=n+2
产量
定义不可除(n):
返回λx:x%n>0
def primes():
收益率2
它=_odd_iter()
尽管如此:
n=下一个(it)
#it=itertools.ifilter(_not_divisible(n),it)#这会起作用
it=itertools.ifilter(lambda x:x%n>0,it)#这不起作用
对于素数()中的n:
如果n您的primes()
函数在循环中缺少一个yield
要使其在不使用\u不可除(n)
的情况下工作,需要在lambda中为n
指定正确的范围。最简单的方法是使用默认参数,每当lambda被传递到ifilter()
时,该参数“冻结”n
的值
我已经减小了循环大小,以使输出更加紧凑
import itertools
def _odd_iter():
n = 1
while True:
n = n + 2
yield n
def primes():
yield 2
it = _odd_iter()
while True:
n = next(it)
yield n
it = itertools.ifilter(lambda x, n=n: x%n > 0, it)
for n in primes():
if n < 100:
print(n)
else:
break
这是上述函数的一个小变化
def _iter():
yield 2
n = 3
while True:
yield n
n = n + 2
def primes():
it = _iter()
while True:
n = next(it)
yield n
it = itertools.ifilter(lambda x, n=n: x%n, it)
您的primes()
函数在循环中缺少一个yield
要使其在不使用\u不可除(n)
的情况下工作,需要在lambda中为n
指定正确的范围。最简单的方法是使用默认参数,每当lambda被传递到ifilter()
时,该参数“冻结”n
的值
我已经减小了循环大小,以使输出更加紧凑
import itertools
def _odd_iter():
n = 1
while True:
n = n + 2
yield n
def primes():
yield 2
it = _odd_iter()
while True:
n = next(it)
yield n
it = itertools.ifilter(lambda x, n=n: x%n > 0, it)
for n in primes():
if n < 100:
print(n)
else:
break
这是上述函数的一个小变化
def _iter():
yield 2
n = 3
while True:
yield n
n = n + 2
def primes():
it = _iter()
while True:
n = next(it)
yield n
it = itertools.ifilter(lambda x, n=n: x%n, it)
“结果并不像我期望的那样”-你期望的结果是什么,你得到了什么?我想让素数小于1000,但当我用lambda表达式替换不可除(n)时,奇数小于1000。请给出一个如何在素数()中摆脱while循环的例子?无论如何,回到你原来的问题,我认为这可能与lambda函数中局部变量n的范围有关。“结果与我预期的不一样”-你预期的结果是什么,你得到的结果是什么?我希望素数小于1000,但当我替换不可除(n)时,奇数小于1000使用lambda表达式。请给出一个如何在primes()中退出while循环的例子?无论如何,回到您最初的问题,我认为它可能与lambda函数中局部变量n的范围有关。