Python 3.2 в режиме ожидания: функция диапазона - печать или список? - PullRequest
7 голосов
/ 23 марта 2011

Я знаю, что это неправильно, но я использую Python 3, но изучаю его с помощью книги Python 2.

это говорит,

>>>range(2,7)

покажет

[2,3,4,5,6]

но я знаю, что это не покажет вывод выше, что я понял. поэтому я попробовал:

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

и та-да показывает следующее:

range(2,7)

похоже, что это одно из изменений с P2 на P3, поэтому я попытался:

list(range(2,7))

это работает нормально на IDLE, но не хорошо на блокноте для длительного кодирования. И вот наконец я попробовал:

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

и это показало нечто похожее на то, что я намеревался ... Я делаю правильно? Это единственный способ написать это?

Ответы [ 2 ]

6 голосов
/ 23 марта 2011

В вашем случае IDLE вы запускаете код в окне PyShell IDLE.Это работает интерактивный переводчик.В интерактивном режиме Python интерпретирует сразу каждую введенную строку и отображает возвращаемое значение, оценивая введенный оператор, плюс все, что записано в стандартный вывод или стандартную ошибку.Для Python 2 range() возвращает список и, как вы обнаружили, в Python 3 он возвращает итеративный объект range(), который можно использовать для создания объекта списка или использовать в другом месте в контекстах итерации.Python 3 range () аналогичен Python 2 xrange () .

Когда вы редактируете файл в редакторе, таком как Блокнот, вы пишете файл скриптаи когда вы запускаете файл в интерпретаторе Python, весь сценарий интерпретируется и запускается как единое целое, даже если он имеет длину только одну строку.На экране вы видите только то, что записано в стандартный вывод (например, «print()») или стандартную ошибку (т.е. отслеживание ошибок);вы не видите результаты оценки каждого утверждения, как в интерактивном режиме.Итак, в вашем примере, при запуске из файла сценария, если вы не распечатываете результаты оценки чего-либо, вы этого не увидите.

В руководстве Python об этом немного говорится здесь .

4 голосов
/ 23 марта 2011

Если ваша единственная цель - вернуть представление списка, то вы делаете правильно.Python 3.0 теперь обрабатывает range как возвращающий итератор (что раньше делал xrange)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...