这个lambda表达式中的e,如何理解?

有一种求素数的方法,流式计算。

def integers_starting_from(i):
    while True:
        yield i
        i += 1
        
def stream_filter(pred, stream):
    while True:
        x = stream.next()
        if pred(x):
            yield x
def sieve():
    def divisible(x):
        return lambda e: e % x != 0
    stream = integers_starting_from(2)
    while True:
        x = stream.next()
        yield x
        stream = stream_filter(divisible(x),stream)

打印前100个素数

def printn(n, stream):
    for _ in xrange(n):
        print stream.next(),
    print
 
printn(100, sieve())

对于上面的计算,有个地方不明白

def sieve():
    def divisible(x):
        return lambda e: e % x != 0
    stream = integers_starting_from(2)
    while True:
        x = stream.next()
        yield x
        stream = stream_filter(divisible(x),stream)
        

这里的return lambda e: e % x != 0
这里的e究竟是指带什么?

阅读 4k
2 个回答

其实我是无聊点进来的,你这个不就是个函数形参么,有什么需要理解的吗?

divisible返回的是函数,这个函数的形参命名为e而已啊,具体是什么就看consumer如何穿参了。

函数curry化,大概是这个意思,利用闭包先将x封装起来。

可能我说的不对,因为没看你的逻辑。

用python 列表推导式和lambda 都是要看的东西,建议先找资料看下

a = lambda e: e+1

等价于

def eplusplus(e):
    return e+1

a = eplusplus

那么调用的时候都是

a(1)
a(100)
a(222)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进