web-dev-qa-db-ja.com

Pythonで無限ループが可能ですか?

forループで無限ループを取得することは可能ですか?

私の推測では、Pythonには無限のforループが存在する可能性があります。将来の参考のためにこれを知りたいのですが。

8
Britni.M

Pythonでの無限ループの典型的な例は次のとおりです。

while True:
    pass

これをforループに適用するには、ジェネレーター(最も単純な形式)を使用します。

def infinity():
    while True:
        yield

これは次のように使用できます。

for _ in infinity():
    pass
9
orokusaki

要求に応じてforループを使用して質問に答えるには、1が0に等しくなることはないため、これは永久にループします。

for _ in iter(int, 1):
    pass

最初の答えに従って増加している数値を使用して無限ループが必要な場合は、itertools.countを使用できます。

from itertools import count

for i in count(0):
    ....
8

はい、常に別の数値を生成するジェネレータを使用します。ここに例があります

def zero_to_infinity():
    i = 0
    while True:
        yield i
        i += 1

for x in zero_to_infinity():
    print(x)

これは、反復するリストを変更することでも実現できます。次に例を示します。

l = [1]
for x in l:
    l.append(x + 1)
    print(x)
5
Jon

itertools.count の使用:

import itertools
for i in itertools.count():
    pass

Python3では、range()ははるかに高くなりますが、無限ではありません。

import sys
for i in range(sys.maxsize**10):  # you could go even higher if you really want but not infinity
    pass

別の方法は

def to_infinity():
    index=0
    while 1:
        yield index
        index += 1

for i in to_infinity():
    pass
2
Sudarshan

itertools.count を試してみませんか?

import itertools
for i in itertools.count():
    print i

0から...までの数字の印刷を開始します。

やってみよう。

**私は数年遅れていることに気づきましたが、他の誰かを助けるかもしれません:)

0
New Guy

無限のforループを実行する方法のニースの例については多くの回答がありましたが、理由はまだ回答されていません(ただし、尋ねられませんでしたが、それでも...)

Python=のforループは、反復可能オブジェクトとそのメソッドの反復子オブジェクトを処理するための構文糖です。たとえば、これは典型的なforループです:

for element in iterable:
    foo(element)

そして、これは裏で起こっていることです:

iterator = iterable.__iter__()
try:
    while True:
        element = iterator.next()
        foo(element)
except StopIteration:
    pass

ご覧のとおり、イテレータオブジェクトには、要素を返し、1回進む(可能な場合は、StopIteration例外を発生させる)a nextmethodが必要です。

そのため、イテレータのnextmethodが決して例外を発生させないすべての反復可能なオブジェクトには、無限ループがあります。例えば:

class InfLoopIter(object):
    def __iter__(self):
        return self # an iterator object must always have this
    def next(self):
        return None

class InfLoop(object):
    def __iter__(self):
        return InfLoopIter()

for i in InfLoop():
    print "Hello World!" # infinite loop yay!
0
Dleep

リストを使用するように構成できます。また、反復するたびにリストに要素を追加して、終了しないようにします。

例:

list=[0]
t=1
for i in list:
        list.append(i)
        #do your thing.
        #Example code.
        if t<=0:
                break
        print(t)
        t=t/10

上記のこの正確なループは、無限に到達しません。ただし、ifステートメントを編集して、無限のforループを取得できます。

これはいくつかのメモリの問題を引き起こす可能性があることを知っていますが、これは私が思いつくことができる最高のものです。

0
user7877086