2014-04-07 16 views
19

Czy python ma natywny typ iteracji nieskończonej liczby całkowitej?Macierzysty nieskończony zakres?

Próbowałem już range(float('inf')) i iter(int), ale żadna z nich nie działa.

mogę oczywiście realizować własne generator wzdłuż linii

def int_series(next=1): 
    while True: 
     next += 1 
     yield next 

ale czuje się jak coś, co powinno już istnieć.

+0

W jakich celów praktycznych byś potrzebował 'inf' – sshashank124

+17

Jak to jest "oparte głównie na opiniach"? – arshajii

+1

Już miałem powiedzieć to samo. Absurdem jest głosować za zamknięciem tak spójnego pytania. – keyser

Odpowiedz

32

Tak. To itertools.count:

>>> import itertools 
>>> x = itertools.count() 
>>> next(x) 
0 
>>> next(x) 
1 
>>> next(x) 
2 
>>> # And so on... 

Można określić start i step argumenty, choć stop nie jest rozwiązaniem (to co xrange jest):

>>> x = itertools.count(3, 5) 
>>> next(x) 
3 
>>> next(x) 
8 
>>> next(x) 
13 
15

Możesz użyć do tego celu itertools.count.

for x in itertools.count(): 
    # do something with x infinite times 

Jeśli nie chcesz używać całkowita zwracana przez count(), to lepiej użyć itertools.repeat:

for _ in itertools.repeat(None): 
    # do something infinite times 
+6

Jeśli nie chcesz używać liczby całkowitej, 'while while True' jest znacznie bardziej odpowiednie. – user2357112

+0

@ user2357112 Pętla może być dwukrotnie wolniejsza od pętli for. –

+5

Jeśli ten mały narzut ma znaczenie, 'while 1' jest kompilowany do bezwarunkowego skoku, który jest nawet szybszy niż pętla for. Najprawdopodobniej czas zajmowany przez ciało pętli będzie dominował, a różnica nie będzie miała znaczenia. – user2357112

Powiązane problemy