首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在python中只使用for-循环来模拟时间循环

在python中只使用for-循环来模拟时间循环
EN

Stack Overflow用户
提问于 2016-08-24 12:33:01
回答 4查看 348关注 0票数 2

在开始使用C学习代码之后,我一直认为for-循环和while-循环本质上都是等价的(在其中一个循环中,只使用另一个循环就可以再现其中一个循环的行为)。但是在python中,虽然从for循环到while循环总是很简单,但我找不到实现相反的方法。

,在python中,是否有任何方法可以仅使用for-循环?来再现时间循环(无限循环)的行为?

下面是一个使用递归生成器(因为递归限制)无法工作的解决方案:

代码语言:javascript
运行
复制
def infinite_loopy():
    yield "All work and no play makes Jack a dull boy"
    for x in infinite_loopy():
        yield x

#here starts the supposedly infinite-loop
for x in infinite_loopy():
    print(x)
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-08-24 12:42:51

您可以通过编写一个迭代器类来做到这一点。

代码语言:javascript
运行
复制
class Infinite(object):
    def __iter__(self):
        return self

    def next(self): # For Python3, replace this with __next__
        return 1

# Loops forever
for i in Infinite():
    pass

(如果你有耐心的话,你可以看到它在意为上停滞--就像看着油漆干了一样)。

票数 5
EN

Stack Overflow用户

发布于 2016-08-24 13:24:09

您可以使用iter的两个参数版本,如下所示:

代码语言:javascript
运行
复制
for _ in iter(int, 1):
    print('All your loops are belong to us!')

iter的2参数形式将第一个参数作为没有参数的函数调用。如果返回的值等于(==)第二个参数,则会引发StopIteration,否则将产生返回值。不带参数调用的int()返回0,这当然不等于1,从而永远产生0,而且我们有一个无限循环。

票数 5
EN

Stack Overflow用户

发布于 2016-08-24 12:41:55

您可以使用itertools.repeatcountcycle

代码语言:javascript
运行
复制
import itertools

for _ in itertools.repeat(None):
    # infinite loop

for _ in itertools.count():
    # infinite loop

for _ in itertools.cycle([None]):
    # infinite loop

所有这些都可以用while循环来表示,但是itertools模块是用c (在cPython中)实现的,而在源代码中不使用while循环。同样适用于jython (java),甚至PyPy (蟒蛇)countcycle也是如此。

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

https://stackoverflow.com/questions/39123449

复制
相关文章

相似问题

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