首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python中的协程与Lua中的协程相比如何?

Python中的协程与Lua中的协程相比如何?
EN

Stack Overflow用户
提问于 2016-09-24 19:32:54
回答 1查看 1.8K关注 0票数 16

对Lua中的协程的支持是由functions in the coroutine table提供的,主要是createresumeyield。开发人员将这些协程描述为stackful, first-class and asymmetric

在Python中也可以使用协程,可以使用enhanced generators (和yield from),也可以使用3.5版中添加的async and await

Python中的协程与Lua中的协程相比如何?它们也是堆叠的、一流的和不对称的吗?

为什么Python需要这么多构造(async defasync withasync forasynchronous comprehensions等)对于协程,而Lua只能为它们提供三个内置函数?

EN

回答 1

Stack Overflow用户

发布于 2016-09-30 17:22:59

我刚刚第一次看到了包括sieve.lua live demo在内的lua。它是使用协程的Erathostenes筛子的一个实现。我的第一个想法是:这在python中看起来要干净得多:

代码语言:javascript
复制
#!/usr/bin/env python3

# sieve.py
# the sieve of Eratosthenes programmed with a generator functions
# typical usage: ./sieve.py 500 | column

import sys

# generate all the numbers from 2 to n
def gen(n):
    for i in range(2,n):
        yield i

# filter the numbers generated by `g', removing multiples of `p'
def filter(p, g):
    for n in g:
        if n%p !=0:
            yield n

N=int(sys.argv[1]) if len(sys.argv)>1 else 500 # from command line
x=gen(N)                     # generate primes up to N
while True:
    try:
        n = next(x)          # pick a number until done
    except StopIteration:
        break
    print(n)                 # must be a prime number
    x = filter(n, x)         # now remove its multiples

这与这个问题没有太多关系,但是在我使用Python 3.4.3的机器上,N>7500的某个地方发生了堆栈溢出。结合使用sieve.luaLua 5.2.3,堆栈溢出已经在N>530上发生了。

生成器对象(表示挂起的协程)可以像其他对象一样传递,并且可以在任何地方对它应用下一个内置的(),因此python中的协程是一流的。如果我错了,请纠正我。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39675844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档