2011-03-22 6 views
6

Wiem, że to jest niewłaściwe, ale używam Pythona 3, ale studiuję go z książką Pythona 2.Python 3.2 bezczynności: funkcja zasięgu - drukowanie lub lista?

mówi,

>>>range(2,7) 

pokaże

[2,3,4,5,6] 

ale wiem, że nie pokaże wyjście powyżej, wyobraziłem. tak próbowałem:

>>>>print(range(2,7)) 

i TA-DA-to pokazuje następujące:

range(2,7) 

wygląda to jedna ze zmian z P2 do P3 więc próbowałem:

list(range(2,7)) 

ten działa poprawnie w trybie IDLE, ale nie w porządku w przypadku długiego kodowania. więc w końcu próbowałem:

print(list(range(2,7))) 

i pokazał coś podobnego do tego, co zamierzałem ... Czy mam rację? Czy to jedyny sposób, aby to napisać?

+0

Ten problem dotyczy również zip. Potrzebujesz 'list (zip (stuff))' –

Odpowiedz

6

W twoim przypadku IDLE, uruchamiasz kod w oknie PyShell IDLE. To uruchamia interaktywny interpreter. W trybie interaktywnym Python natychmiast interpretuje każdą wpisaną linię i wyświetla wartość zwracaną przez ewaluację wpisanej instrukcji oraz wszystko, co napisano na standardowe wyjście lub błąd standardowy. Dla Pythona 2, range() zwraca listę i, jak odkryłeś, w Pythonie 3 zwraca iterowalny obiekt range(), którego możesz użyć do utworzenia obiektu listy lub użycia go w innych kontekstach iteracji. Python 3 range() jest podobny do Pythona 2: xrange().

Gdy edytujesz plik w edytorze, takim jak Notatnik, piszesz plik skryptu i po uruchomieniu pliku w interpretera Pythona cały skrypt jest interpretowany i uruchamiany jako jednostka, nawet jeśli jest to tylko jedna linia długie. Na ekranie widać tylko to, co jest zapisywane na standardowym wyjściu (tj. "print()") lub standardowy błąd (to jest śledzenie błędów); nie widać wyników oceny każdego wyciągu, tak jak w trybie interaktywnym. Tak więc, w twoim przykładzie, podczas uruchamiania z pliku skryptu, jeśli nie wydrukujesz wyników oceny czegoś, nie zobaczysz tego.

Samouczek w języku Python mówi trochę o tym here.

4

Jeśli Twoim jedynym celem jest odzyskanie reprezentacji listy, to co robisz jest poprawne. Python 3.0 traktuje teraz range jako powracający iterator (co zrobił xrange)