Первые шаги¶
Давайте посмотрим, как создать традиционную программу «Hello World» на Python. Это научит вас писать, сохранять и выполнять программы на Python.
Существует два способа запуска программ на Python: использование интерактивного приглашения интерпретатора и использование файла с текстом программы. Сейчас мы увидим, как пользоваться обоими методами.
Использование командной строки интерпретатора¶
Откройте окно терминала (как было описано в главе Установка) и запустите интерпретатор Python, введя команду python3 и нажав Enter .
Пользователи Windows могут запустить интерпретатор в командной строке, если установили переменную PATH надлежащим образом. Чтобы открыть командную строку в Windows, зайдите в меню «Пуск» и нажмите «Выполнить. «. В появившемся диалоговом окне введите «cmd» и нажмите Enter ; теперь у вас будет всё необходимое для начала работы с python в командной строке DOS.
Если вы используете IDLE, нажмите «Пуск» —> «Программы» —> «Python 3.0» —> «IDLE (Python GUI)».
Как только вы запустили python3 , вы должны увидеть >>> в начале строки, где вы можете что-то набирать. Это и называется командной строкой интерпретатора Python.
Теперь введите print(‘Hello World’) и нажмите клавишу Enter . В результате должны появиться слова «Hello World».
Вот пример того, что вы можете увидеть на экране, если будете использовать компьютер с Mac OS X. Информация о версии Python может отличаться в зависимости от компьютера, но часть, начинающаяся с приглашения (т. е. от >>> и далее) должна быть одинаковой на всех операционных системах.
Обратите внимание, что Python выдаёт результат работы строки немедленно! Вы только что ввели одиночный «оператор» Python. print используется для того, чтобы (что неудивительно 1 ) напечатать любое переданное в него значение. В данном случае мы передали в него текст «Hello World», который и был напечатан на экране.
Как выйти из командной строки интерпретатора
Если вы используете IDLE или оболочку GNU/Linux или BSD, вы можете выйти из командной строки интерпретатора нажатием Ctrl-D или введя команду exit() (примечание: не забудьте написать скобки, «()»), а затем нажав клавишу Enter . Если вы используете командную строку Windows, нажмите Ctrl-Z , а затем нажмите клавишу Enter .
Выбор редактора¶
Поскольку мы не можем набирать программу в командной строке интерпретатора каждый раз, когда нам нужно что-то запустить, нам понадобится сохранять программы в файлах, чтобы потом иметь возможность запускать их сколько угодно раз.
Прежде чем приступить к написанию программ на Python в файлах, нам нужен редактор для работы с файлами программ. Выбор редактора крайне важен. Подходить к выбору редактора следует так же, как и к выбору личного автомобиля. Хороший редактор поможет вам легко писать программы на Python, делая ваше путешествие более комфортным, а также позволяя быстрее и безопаснее достичь вашей цели.
Одно из самых основных требований — это подсветка синтаксиса, когда разные элементы программы на Python раскрашены так, чтобы вы могли легко видеть вашу программу и ход её выполнения.
Если вы не знаете, с чего начать, я бы порекомендовал воспользоваться программой Komodo Edit, которая доступна для Windows, Mac OS X и GNU/Linux.
Если вы пользуетесь Windows, Не используйте Блокнот — это плохой выбор, поскольку он не обладает функцией подсветки синтаксиса, а также не позволяет автоматически вставлять отступы, что очень важно в нашем случае, как мы увидим позже. Хорошие редакторы, как Komodo Edit, позволяют делать это автоматически.
Опытные программисты, должно быть, уже используют Vim или Emacs. Не стоит даже и говорить, что это два наиболее мощных редактора, и вы только выиграете от их использования для написания программ на Python. Лично я пользуюсь ими обоими для большинства своих программ, и даже написал книгу о Vim. Я настоятельно рекомендую вам решиться и потратить время на изучение Vim или Emacs, поскольку это будет приносить вам пользу долгие годы. Однако, как я уже писал выше, новички могут пока просто остановиться на Komodo Edit и сосредоточиться на изучении Python, а не текстового редактора.
Я повторюсь ещё раз: обязательно выберите подходящий редактор — это сделает написание программ на Python более простым и занимательным.
Для пользователей Vim
Существует хорошее введение в использование Vim как мощного IDE для Python, автор — John M Anderson. Также я рекомендую плагин jedi-vim и мой собственный конфигурационный файл.
Для пользователей Emacs
Существует хорошее введение в использование Emacs как мощного IDE для Python, автор — Ryan McGuire. Также я рекомендую Конфигурацию dotemacs от BG.
Использование программных файлов¶
А теперь давайте вернёмся к программированию. Существует такая традиция, что какой бы язык программирования вы ни начинали учить, первой вашей программой должна быть программа «Привет, Мир!». Это программа, которая просто выводит надпись «Привет, Мир!». Как сказал Simon Cozens 2 , это «традиционное заклинание богов программирования, которое поможет вам лучше изучить язык».
Запустите выбранный вами редактор, введите следующую программу и сохраните её под именем helloworld.py .
Если вы пользуетесь Komodo Edit, нажмите «Файл» —> «Новый» —> «Новый файл», введите строку:
В Komodo Edit нажмите «Файл» —> «Сохранить» для сохранения файла.
Куда сохранить файл? В любую папку, расположение которой вы знаете. Если вы не понимаете, что это значит, то создайте новую папку и используйте её для всех ваших программ на Python:
- C:\py в Windows
- /tmp/py в GNU/Linux
- /tmp/py в Mac OS X
Чтобы создать папку, воспользуйтесь командой mkdir в терминале. Например, mkdir /tmp/py .
Не забывайте указывать расширение файла .py . Например, » file.py «.
В Komodo Edit нажмите «Инструменты» —> «Запуск команды», наберите python3 helloworld.py и нажмите «Выполнить». Вы должны увидеть вывод, показанный на скриншоте ниже.

Но всё-таки лучше редактировать программу в Komodo Edit, а запускать в терминале:
- Откройте терминал, как описано в главе Установка.
- Перейдите в каталог, в котором вы сохранили файл. Например, cd /tmp/py .
- Запустите программу, введя команду python3 helloworld.py .
Вывод программы показан ниже.
Если у вас получился такой же вывод, поздравляю! — вы успешно выполнили вашу первую программу на Python. Вы только что совершили самый сложный шаг в обучении программированию, заключающийся в написании своей первой программы!
Если вы получите сообщение об ошибке, введите вышеуказанную программу в точности так, как показано здесь, и запустите снова. Обратите внимание, что Python различает регистр букв, то есть print — это не то же самое, что Print (обратите внимание на букву p в нижнем регистре в первом случае и на букву P в верхнем регистре во втором). Также убедитесь, что перед первым символом в строке нет пробелов или символов табуляции — позже мы увидим, почему это важно.
Как это работает
Программа на Python состоит из выражений. В нашей первой программе имеется всего лишь одно выражение. В этом выражении мы вызываем функцию print , которая просто выводит текст ‘Привет, Мир!’ . О функциях мы узнаем в одной из последующих глав, а пока вам достаточно понять, что всё, что вы укажете в скобках, будет выведено на экран. В данном примере мы указали ‘Привет, Мир!’ .
Python никак не обрабатывает комментарии, кроме специального случая в первой строке. Она называется »строка shebang»; когда первые два символа файла с программой — #! , за которыми следует путь к некоторой программе, это указывает вашей Unix-подобной системе, что вашу программу нужно запускать именно в этом интерпретаторе, когда вы »исполняете» её. Это объясняется подробно в следующем параграфе. Помните, что вы всегда можете запустить свою программу на любой платформе, указав интерпретатор напрямую в командной строке, как например, команда python helloworld.py .
Важно! Вставляйте разумные комментарии в ваши программы, чтобы объяснить некоторые важные детали вашей программы — это будет полезно для тех, кто будет читать вашу программу, так как им легче будет понять, что программа делает. Помните, что таким человеком можете оказаться вы сами через полгода!
Исполнимые программы на Python¶
Это касается только пользователей GNU/Linux и Unix, но пользователям Windows тоже будет полезно об этом знать.
Каждый раз, когда нам нужно запустить программу на Python, нам приходится в явном виде запускать python3 foo.py . Но почему бы нам не запускать её точно так же, как и все другие программы? Этого можно достичь при помощи так называемого hashbang.
Добавьте строку, указанную ниже, в самое начало вашей программы:
Теперь ваша программа должна выглядеть так:
Теперь необходимо установить программе атрибут исполнимости, используя команду chmod , а затем выполнить программу.
Команда chmod здесь используется для изменения режима файла 3 добавлением атрибута исполнимости для всех пользователей в системе 4 .
После этого мы можем запускать программу напрямую, потому что наша операционная система запустит /usr/bin/env , который, в свою очередь, найдёт Python 3, а значит, сможет запустить наш файл.
Здесь » ./ » обозначает, что программа находится в текущем каталоге.
Ради интереса можете даже переименовать файл в просто » helloworld » и запустить его как ./helloworld , и это также сработает, поскольку система знает, что запускать программу нужно интерпретатором, положение которого указано в первой строке файла программы.
Но до сих пор мы могли выполнять свою программу только если знали полный путь к ней. А что, если нам нужно запускать эту программу из любого каталога? Это можно организовать, расположив свою программу в одном из каталогов, перечисленных в переменной окружения PATH .
При попытке запуска какой-либо программы система ищет её в каталогах, перечисленных в переменной окружения PATH , и запускает. Таким образом, мы можем сделать программу доступной из любого места, скопировав её в один из каталогов, перечисленных в PATH .
Мы можем вывести на экран значение переменной PATH при помощи команды echo , добавив перед именем переменной символ $ , чтобы указать оболочке, что мы хотим получить значение этой переменной. Мы видим, что /home/swaroop/bin — один из каталогов в переменной PATH, где swaroop — это имя пользователя, которое я использую в своей системе. В вашей системе, скорее всего, будет аналогичный каталог для вашего пользователя.
Вы также можете добавить какой-либо каталог к переменной PATH — это можно сделать, выполнив PATH=$PATH:/home/swaroop/mydir , где ‘/home/swaroop/mydir’ — это каталог, который я хочу добавить к переменной PATH .
Этот метод полезен для написания сценариев, которые будут доступны для запуска в любой момент из любого места. По сути, это равносильно созданию собственных команд, как cd или любой другой, которые часто используются в терминале GNU/Linux или приглашении DOS.
Когда речь идёт о Python, слова «программа» или «сценарий (скрипт)» обозначают одно и то же.
Получение помощи¶
Для быстрого получения информации о любой функции или операторе Python служит встроенная функция help . Это особенно удобно при использовании командной строки интерпретатора. К примеру, выполните help(print) — это покажет справку по функции print , которая используется для вывода на экран.
Для выхода из справки нажмите q .
Аналогичным образом можно получить информацию почти о чём угодно в Python. При помощи функции help() можно даже получить описание самой функции help !
Если вас интересует информация об операторах, как например, return , их необходимо указывать в кавычках (например, help(‘return’) ), чтобы Python понял, чего мы хотим.
Резюме¶
Теперь вы умеете с лёгкостью писать, сохранять и запускать программы на Python.
И поскольку сейчас вы уже используете Python, давайте узнаем больше о его основных принципах.
Автор восхитительной книги «Beginning Perl» ↩
changemode — англ. «изменить режим» (прим. перев.) ↩
В указанной команде буква «a» взята из слова «all» (англ. «все»), а буква «x» — из слова «execute» (англ. «исполнять») — прим. перев. ↩
Введение в Python
Чтобы начать играть с Python, нам нужно открыть командную строку на твоём компьютере. Ты уже должна знать, как это сделать — мы изучали это в главе Введение в интерфейс командной строки.
Когда будешь готова, следуй приведенным ниже инструкциям.
Мы хотим открыть консоль Python, так что набери python , если работаешь в Windows, или python3 для Mac OS/Linux, и нажми enter .
Твоя первая команда Python!
После запуска Python командная строка изменилась на >>> . Для нас это означает, что сейчас мы можем использовать только команды на языке Python. Тебе не нужно вводить >>> — Python будет делать это за нас.
Если ты хочешь выйти из консоли Python, в любой момент — просто введи exit() или используй сочетание клавиш Ctrl + Z для Windows и Ctrl + D для Mac/Linux. Тогда ты больше не будешь видеть >>> .
Пока что мы не хотим выходить из консоли Python. Мы хотим узнать больше о ней. Давай начнём с чего-нибудь совсем простого. Например, попробуй набрать простое математическое выражение, вроде 2 + 3 , и нажми enter .
Прекрасно! Видишь, как выскочил ответ? Python знает математику! Ты можешь попробовать другие команды, например:
- 4 * 5
- 5 — 1
- 40 / 2
Чтобы вычислить степень числа, например, 2 в кубе, мы вводим:
Поиграй с этим немного и затем вернись сюда :).
Как видишь, Python является прекрасным калькулятором. Если тебе интересно, что ещё можно сделать.
Строки
Как насчет твоего имени? Введи своё имя в кавычках, вот так:
Ты только что создала свою первую строку! Это последовательность символов, которые могут быть обработаны компьютером. Строка должна всегда начинаться и заканчиваться одинаковым символом. Им может быть одинарная ( ' ) или двойная ( " ) кавычка (разницы нет!) Кавычки говорят Python'у, что внутри них находится строка.
Строки могут быть слиты воедино. Попробуй так:
Ты также можешь умножать строки на число:
Если тебе нужно поставить апостроф внутри строки, то есть два способа сделать это.
Используй двойные кавычки:
или поставь перед апострофом обратную косую черту ( \ ):
Прикольно, да? Чтобы увидеть своё имя прописными буквами, просто набери:
Ты только что использовала метод upper своей строки! Метод (такой как upper() ) представляет собой набор инструкций, который должен выполнить Python над заданным объектом (в нашем случае: "Ola" ) при его вызове.
Если ты хочешь узнать количество букв в своём имени, то и для этого тоже существует функция!
Интересно, почему иногда мы вызываем функцию добавлением . к концу строки (как "Ola".upper() ), а иногда сначала пишем имя функции и затем помещаем строку в скобки? Ну, в некоторых случаях функции принадлежат объектам, например, функция upper() , которая может быть применена только к строкам. В этом случае мы называем функцию методом. В другом случае функции не относятся к чему-то конкретному и могут использоваться для различных типов объектов, например, функция len() . Вот почему мы передаем "Ola" в качестве параметра функции len .
Подведём итог
Хорошо, достаточно о строках. Пока ты узнала следующее:
- командная строка — ввод команд (кода) в интерактивную командную строку Python приводит к ответам на Python;
- числа и строки — в Python числа используются для вычислений, а строки — для текстовых объектов;
- операторы, такие как + и *, объединяют значения для получения нового;
- функции, такие как upper() и len(), выполняют действия над объектами.
Таковы основы каждого языка программирования, который ты можешь выучить. Готова к чему-то посложнее? Мы уверены, что готова!
Ошибки
Давай попробуем кое-что новенькое. Можем ли мы получить длину числа так же, как длину твоего имени? Введи len(304023) и нажми Enter :
Мы получили нашу первую ошибку! Иконкой мы будем обозначать код, который при запуске сработает не так, как ожидается. Совершение ошибок (даже преднамеренных) — важная часть обучения!
Она говорит о том, что у объектов типа «int» (целые числа) нет длины. Так что же мы можем сейчас сделать? Может быть, мы можем написать наше число в виде строки? У строк ведь есть длина, верно?
Сработало! Мы использовали функцию str внутри функции len . str() преобразует всё в строки.
- Функция str преобразует объекты в строки
- Функция int преобразует объекты в целые числа
Важно: мы можем преобразовать число в текст, но не всегда удается преобразовать текст в числа — например, каков будет результат int('hello') ?
Переменные
Переменные — важное понятие в программировании. Переменная — это всего лишь имя для чего-то, чтобы использовать его позднее. Программисты используют переменные для хранения данных, чтобы их код был более читабельным, и для того, чтобы им не пришлось запоминать, что есть что.
Допустим, мы хотим создать новую переменную с именем name :
Видишь? Это очень легко! Просто введи: name равно Ola.
Как ты уже заметила, твоя программа не возвращает ничего, как было ранее. Так откуда мы знаем, что переменная действительно существует? Просто введи name и нажми Enter :
Ура! Твоя первая переменная:)! Ты всегда можешь изменить то, к чему она относится:
Ты также можешь использовать переменные и в функциях:
Круто, правда? Переменными, конечно, может быть что угодно, и цифры тоже! Попробуй следующее:
Но что делать, если мы использовали неправильное имя? Можешь догадаться, что произойдет? Давай попробуем!
Ошибка! Как ты можешь видеть, в Python есть различные типы ошибок, эта называется NameError. Python выдаст эту ошибку при попытке использовать переменную, которая пока не определена. При возникновении этой ошибки проверь свой код, чтобы узнать, не написала ли ты неправильно имя переменной.
Попрактикуйся в этом какое-то время и посмотри, что ты сможешь сделать!
Функция print
Если просто ввести name , интерпретатор Python вернет строковое представление переменной 'name', которым, в нашем случае, являются буквы M-a-r-i-a, окруженные одинарными кавычками, ''. Когда ты вводишь print(name) , Python "печатает" содержание переменной на экран, без кавычек, что удобнее.
Как мы увидим позднее, print() пригодится, когда нам будет нужно печатать что-то изнутри функций или когда мы захотим напечатать что-то на нескольких строчках.
Списки
Помимо строк и целых чисел Python имеет богатую коллекцию других типов объектов. Сейчас мы собираемся представить тебе один из них — list (список). Списки — это именно то, о чём ты подумала: объекты, которые являются списками других объектов 🙂
Давай начнем с создания списка:
Отлично, это пустой список. Не особенно полезен, да? Давай создадим список лотерейных номеров. Мы не хотим повторять их каждый раз, так что присвоим список переменной:
Замечательно, у нас есть список! Что мы можем с ним сделать? Для начала посмотрим, как много лотерейных номеров в нашем списке. Есть идеи, какую функцию можно использовать для этого? Ты её уже знаешь!
Точно! len() вернет тебе количество объектов в списке. Удобно, правда? Пожалуй, мы теперь отсортируем его:
Эта команда не возвращает ничего, она просто меняет порядок номеров в списке. Давайте выведем его на экран и посмотрим, что получилось:
Как видишь, номера в списке теперь отсортированы от меньшего к большему. Поздравляем!
Может, нам нужно обратить порядок? Давай сделаем это!
Просто, правда? Если хочешь добавить что-то к своему списку, то можешь воспользоваться этой командой:
Если ты хочешь получить только первый номер в списке, то можешь воспользоваться индексами. Индекс — это номер позиции в списке, на котором находится нужное нам значение. Программисты предпочитают начать считать с 0, так что первому объекту в списке соответствует индекс 0, следующему —1, и так далее. Попробуй ввести:
Как видишь, ты можешь обратиться к различным объектам в своем списке, используя имя списка и индекс объекта в квадратных скобках.
Чтобы удалить что-либо из списка, тебе понадобятся индексы, с которыми мы уже разобрались выше, и команда pop() . Давай попробуем закрепить пройденное на примере: мы будем удалять первый элемент из нашего списка.
Сработало как по маслу!
В качестве дополнительной тренировки попробуй следующие индексы: 6, 7, 1000, -1, -6 и -1000. Можешь предсказать результат? Видишь логику работы?
Ты можешь найти перечень всех методов, относящихся к списку, в этой главе официальной документации Python: https://docs.python.org/3/tutorial/datastructures.html
Словари
Для проходящих руководство дома: этот раздел рассмотрен в видео Python Basics: Dictionaries.
Словари схожи со списками, но ты обращаешься к значениям словаря по ключу, а не по индексу. Ключом может быть любая строка или число. Давай создадим пустой словарь:
Это показывает, что мы создали пустой словарь. Ура!
Теперь попробуй следующую команду (можешь заменить значения на своё имя, страну и т.д.):
Этой командой ты создала переменную participant с тремя парами ключ/значение:
- ключ name , указывающий на значение 'Ola' (объект типа строка ),
- ключ country , указывающий на значение 'Poland' (еще одна строка ),
- и ключ favorite_numbers , указывающий на значение [7, 42, 92] (объект типа список с тремя числами внутри).
Значение конкретного ключа можно узнать следующим образом:
Видишь, синтаксис похож на работу со списком. Но вместо того, чтобы запоминать индекс, тебе нужно помнить ключ.
Что случится, если мы спросим у Python значение несуществующего в словаре ключа? Можешь предположить? Давай попробуем и узнаем наверняка!
Смотри, другая ошибка! Эта называется KeyError. Python услужливо напоминает, что ключа 'age' нет в словаре.
Когда стоит использовать словарь, а когда список? Это хороший вопрос для самостоятельного размышления. Сделай предположение перед тем, как читать дальше.
- Тебе нужна упорядоченная последовательность элементов? Список — наш выбор.
- Тебе нужны сочетания ключ/значение, чтобы быстро искать значения (по ключу) в дальнейшем? Словарь отлично подойдет.
Словари, как и списки, изменяемы, т. е. они могут быть изменены после того, как были созданы. Ты можешь добавить новые пары ключ/значение в словарь следующим образом:
Так же как в примере со списками, использование функции len() вернёт число пар ключ/значение в словаре. Попробуй сама:
Надеюсь, всё вышеизложенное понятно. 🙂 Готова к новым приключениям со словарями? На следующей строке тебя ждут изумительные вещи.
Ты можешь использовать команду pop() для удаления элементов из словаря. Скажем, ты хочешь удалить элемент с ключом 'favorite_numbers' . Просто набери следующую команду:
Как видишь, пара ключ/значение с ключом 'favorite_numbers' была удалена.
Помимо этого, ты можешь заменить значение, связанное с уже существующим ключом. Набери:
Значение, на которое ссылается ключ 'country' , изменилось с 'Poland' на 'Germany' . 🙂 Захватывает? Ещё бы! Ты выучила еще одну потрясающую штуку!
Подведём итог
Шикарно! Теперь ты знаешь немало о программировании. Мы познакомились с:
- ошибками — теперь ты знаешь как читать и анализировать ошибки, которые возникают, если Python не понимает твоей команды;
- переменными — именами для объектов, которые упрощают твой код и делают его более читабельным;
- списками — последовательностями объектов в заданном порядке;
- словарями — объектами, хранящими пары ключ/значение.
Готова к продолжению? 🙂
Сравнения
Для проходящих руководство дома: этот раздел рассмотрен в видео Python Basics: Comparisons.
В программировании часто надо что-то сравнивать. Что проще всего сравнить друг с другом? Числа, конечно. Давай посмотрим, как это работает:
Мы передали Python несколько чисел для сравнения. Как ты можешь заметить, Python сравнивает не только числа, но и результаты методов (например, умножения). Неплохо, правда?
Хочешь спросить, почему мы написали двойной символ равенства == , чтобы проверить, одинаковы ли числа? Потому что одинарные символ равенства = уже задействован под присваивание значения переменным. Ты всегда, всегда должна писать два символа равенства == , если хочешь проверить, одинаковы ли объекты. Мы также можем проверить, различаются ли объекты. Для этого мы используем != , как показано в примере выше.
Дадим Python еще два задания:
С > и < все понятно, но что значат >= и <= ? Читай их следующим образом:
- x > y означает: x больше y
- x < y означает: x меньше y
- x <= y означает: x меньше или равен y
- x >= y означает: x больше или равен y
Супер! Хочешь еще? Тогда попробуй вот это:
Ты можешь передать Python столько чисел, сколько захочешь, и он будет возвращать ответ! Хитро, правда?
- and — если ты используешь оператор and , оба сравнения по обе стороны от него должны быть True (верны), чтобы результат всей команды был равен True.
- or — если ты используешь оператор or , достаточно одному из сравнений по обе стороны от него быть равным True, чтобы результат всей команды также равнялся True.
Ты когда-нибудь слышала выражение "сравнивать тёплое с мягким"? Попробуем сделать что-то подобное в Python:
Как мы видим, Python не знает, как сравнить число ( int ) и строку ( str ) между собой. Поэтому он просто возвращает нам ошибку TypeError и предупреждает, что объекты заданных типов не могут быть сравнены.
Логические значения
Между прочим, ты только что познакомилась с новым типом объектов в Python. Он называется Boolean (логический) — и это, наверное, самый простой тип из всех.
Существует только два логических объекта в Python:
- True (Истина),
- False (Ложь).
Чтобы Python понимал тебя, ты всегда должна писать True с заглавной буквы (остальные прописные). true, TRUE, tRUE не будут восприниматься — только True. (Та же логика применима к False, само собой.)
Ты можешь присваивать переменным логические значения! Смотри сюда:
Попрактикуйся с логическими значениями на примере этих выражений:
- True and True
- False and True
- True or 1 == 1
- 1 != 2
Поздравляем! Логические значения — одна из самых классных фишек программирования, и ты только что научилась ими пользоваться!
Сохраняй!
До сих пор мы писали весь код в интерактивной консоли, где Python сразу анализировал, обрабатывал и выполнял наши команды. Мы были ограничены одной строкой. Обычно, программы сохраняются в файлах и выполняются интерпретатором или компилятором нашего языка программирования. Пока мы только просили интерпретатор Python выполнять наши однострочные команды из консоли. Однако нам понадобится больше места для следующих задач, поэтому задача минимум:
- закрыть интерактивную консоль Python;
- открыть наш текстовый редактор;
- сохранить код в новом файле;
- запустить его!
Чтобы закрыть интерактивную консоль Python, просто набери функцию exit() :
Это вернёт тебя в командную строку.
В главе Текстовый редактор мы выбрали себе редактор. Нам нужно открыть его сейчас и записать следующий код в новый файл (или, если ты используешь Chromebook, создай новый файл в облачной IDE и открой файл, который будет во встроенном редакторе кода):
Очевидно, ты уже искушенный Python разработчик, так что не стесняйся добавить что-нибудь по своему вкусу из ранее изученного.
Теперь нам нужно сохранить файл с кодом и дать ему подходящее имя. Давай назовем его python_intro.py и сохраним на рабочий стол. Мы можем назвать файл как хотим, но важно, чтобы название заканчивалось на .py. Расширение .py говорит операционной системе, что это исполняемый файл python, и Python может его запустить.
Примечание Ты должна уже была заметить одну из крутейших вещей в редакторах кода: цвета! В интерактивной консоли Python весь текст был одного цвета, сейчас же функция print должна отличаться по цвету от текста, который передается в неё в качестве аргумента. Это называется «синтаксическая подсветка», и это действительно удобная штука для программирования. Цвет подсветки может подсказать тебе о незакрытой кавычке или опечатке в ключевом слове (таком как def в определении функции, с которым мы скоро познакомимся). Это одна из причин, по которой мы используем редакторы кода 🙂
После сохранения файла пришло время запустить его! Используя навыки из раздела о командной строке, открой терминал и поменяй текущую директорию на рабочий стол.
How to execute a command prompt command from python
I don’t think you can pipe into cmd.exe . If you are coming from a unix background, well, cmd.exe has some ugly warts!
EDIT: According to Sven Marnach, you can pipe to cmd.exe . I tried following in a python shell:
As you can see, you still have a bit of work to do (only the first line is returned), but you might be able to get this to work.
![]()
Using ‘ and " at the same time works great for me (Windows 10, python 3)
for example to open my web browser I can use this:
(Edit) for an easier way to open your browser I can use this:
![]()
Try adding a call to proc.stdin.flush() after writing to the pipe and see if things start behaving more as you expect. Explicitly flushing the pipe means you don’t need to worry about exactly how the buffering is set up.
Also, don’t forget to include a «\n» at the end of your command or your child shell will sit there at the prompt waiting for completion of the command entry.
I wrote about using Popen to manipulate an external shell instance in more detail at: Running three commands in the same process with Python
As was the case in that question, this trick can be valuable if you need to maintain shell state across multiple out-of-process invocations on a Windows machine.
Командная строка и среда
Интерпретатор CPython сканирует командную строку и окружение на наличие различных настроек.
Сведения о реализации CPython: схемы командной строки других реализаций могут отличаться. Дополнительные ресурсы см. в разделе Альтернативные реализации .
1.1.Командная строка
При вызове Python вы можете указать любой из этих параметров:
Самым распространенным вариантом использования является,конечно,простой вызов сценария:
1.1.1.Параметры интерфейса
Интерфейс интерпретатора напоминает интерфейс оболочки UNIX,но предоставляет некоторые дополнительные методы вызова:
- При вызове со стандартным вводом,подключенным к устройству tty,он запрашивает команды и выполняет их до появления символа EOF (символ конца файла,который можно получить с помощью кнопки Ctrl — D в UNIX или Ctrl — Z, Enter в Windows)считывается.
- При вызове с аргументом имени файла или с файлом в качестве стандартного ввода,он считывает и выполняет сценарий из этого файла.
- При вызове с аргументом имени каталога,он считывает и выполняет сценарий с соответствующим именем из этого каталога.
- При вызове с -c command он выполняет оператор (ы) Python, заданный как команду . Здесь команда может содержать несколько операторов, разделенных символами новой строки. В операторах Python важны ведущие пробелы!
- При вызове с параметром -m module-name -модуля данный модуль располагается в пути к модулю Python и выполняется как сценарий.
В неинтерактивном режиме весь входной сигнал разбирается перед выполнением.
Опция интерфейса завершает список опций, потребляемых интерпретатором, все последовательные аргументы заканчиваются в sys.argv — обратите внимание, что первый элемент, нулевой индекс ( sys.argv[0] ), представляет собой строку, отражающую источник программы.
Выполните код Python в команде . Команда может быть одним или несколькими операторами, разделенными новой строкой, со значительными ведущими пробелами, как в обычном коде модуля.
Если задана эта опция, первым элементом sys.argv будет «-c» , а текущий каталог будет добавлен в начало sys.path (что позволяет импортировать модули в этом каталоге как модули верхнего уровня).
cpython.run_command событие аудита cpython.run_command с аргументом command .
Найдите в sys.path названный модуль и выполните его содержимое как модуль __main__ .
Поскольку аргумент — это имя модуля , вы не должны указывать расширение файла ( .py ). Имя модуля должно быть действительным абсолютным именем модуля Python, но реализация может не всегда обеспечивать это (например, может позволить вам использовать имя, содержащее дефис).
Имена пакетов (включая пакеты пространства имен) также разрешены. Когда вместо обычного модуля предоставляется имя пакета, интерпретатор выполнит <pkg>.__main__ в качестве основного модуля. Это поведение намеренно похоже на обработку каталогов и zip-файлов, которые передаются интерпретатору в качестве аргумента сценария.
Этот параметр нельзя использовать для встроенных модулей и модулей расширения,написанных на C,поскольку они не имеют файлов модулей Python.Однако его можно использовать для предварительно скомпилированных модулей,даже если исходный файл недоступен.
Если задана эта опция, первым элементом sys.argv будет полный путь к файлу модуля (пока файл модуля находится, первый элемент будет установлен на «-m» ). Как и в случае с параметром -c , текущий каталог будет добавлен в начало sys.path .
-I можно использовать для запуска сценария в изолированном режиме, когда sys.path не содержит ни текущего каталога, ни каталога пакетов сайта пользователя. Всепеременные среды PYTHON* также игнорируются.
Многие стандартные библиотечные модули содержат код, который вызывается при их выполнении в виде сценария. Примером может служить модуль timeit :
cpython.run_module событие аудита cpython.run_module с аргументом module-name .
Эквивалентная функциональность непосредственно доступна для кода Python
PEP 338 — Выполнение модулей как скриптов
Изменено в версии 3.1: укажите имя пакета для запуска подмодуля __main__ .
Изменено в версии 3.4:пакеты пространства имен также поддерживаются
Считывать команды со стандартного ввода ( sys.stdin ). Если стандартный ввод является терминалом, подразумевается -i .
Если задана эта опция, первым элементом sys.argv будет «-» , а текущий каталог будет добавлен в начало sys.path .
cpython.run_stdin событие аудита cpython.run_stdin без аргументов.
Выполните код Python, содержащийся в скрипте , который должен быть путем в файловой системе (абсолютным или относительным), относящимся к файлу Python, каталогу, содержащему файл __main__.py ,или zip-файлу,содержащему файл __main__.py .
Если задана эта опция, первым элементом sys.argv будет имя сценария, указанное в командной строке.
Если имя сценария относится непосредственно к файлу Python, каталог, содержащий этот файл, добавляется в начало sys.path , и файл выполняется как модуль __main__ .
Если имя сценария относится к каталогу или zip-файлу, имя сценария добавляется в начало sys.path , и файл __main__.py в этом месте выполняется как модуль __main__ .
-I можно использовать для запуска сценария в изолированном режиме, когда sys.path не содержит ни каталога сценария, ни каталога пакетов сайта пользователя. Всепеременные среды PYTHON* также игнорируются.
cpython.run_file событие аудита cpython.run_file с аргументом filename .
Эквивалентная функциональность непосредственно доступна для кода Python
Если опция интерфейса не указана, подразумевается -i sys.argv[0] — это пустая строка ( «» ), а текущий каталог будет добавлен в начало sys.path . Кроме того, автоматически включается завершение табуляции и редактирование истории, если они доступны на вашей платформе (см. Конфигурация Readline ).
Изменения в версии 3.4:Автоматическое включение завершения вкладок и редактирования истории.
1.1.2.Общие параметры
Вывести краткое описание всех опций командной строки и соответствующих переменных окружения и выйти.
Выведите краткое описание переменных окружения,специфичных для Python,и завершите работу.
Новинка в версии 3.11.
Вывести описание опций -X для конкретной реализации и выйти.
Новинка в версии 3.11.
Распечатайте полную информацию об использовании и выйдите.
Новинка в версии 3.11.
Выведите номер версии Python и выйдите.Пример вывода может быть следующим:
При двойном указании выводит дополнительную информацию о сборке,например:
Новое в версии 3.6: опция -VV .
1.1.3.Различные опции
Выдавать предупреждение при сравнении bytes или bytearray с str или bytes с int . Выдает ошибку, когда опция указана дважды ( -bb ).
Изменено в версии 3.5: Влияет на сравнение bytes с int .
Если указано, Python не будет пытаться писать файлы .pyc при импорте исходных модулей. См. также PYTHONDONTWRITEBYTECODE .
Управляйте поведением при проверке файлов .pyc на основе хеша.См. Инвалидация кэшированного байт-кода . Если задано значение default , проверенные и непроверенные файлы кэша байт-кода на основе хэшей проверяются в соответствии с их семантикой по умолчанию. Если установлено значение always ,все файлы .pyc на основе хэшей , независимо от того, проверены они или нет, проверяются на соответствие соответствующим исходным файлам. Если установлено значение never ,файлы .pyc на основе хеша не проверяются на соответствие соответствующим исходным файлам.
Этот параметр не влияет на семантику файлов .pyc на основе временных меток.
Включите отладочный вывод парсера (только для эксперта, в зависимости от параметров компиляции). См. также PYTHONDEBUG .
Игнорируйте все переменные среды PYTHON* ,например, PYTHONPATH и PYTHONHOME , которые могут быть установлены.
См. также опции -P и -I (изолированные).
Если в качестве первого аргумента передается сценарий или используется параметр -c , войдите в интерактивный режим после выполнения сценария или команды, даже если sys.stdin не является терминалом. Файл PYTHONSTARTUP не читается.
Это может быть полезно для проверки глобальных переменных или трассировки стека, когда скрипт вызывает исключение. См. также PYTHONINSPECT .
Запустите Python в изолированном режиме. Это также подразумевает опции -E , -P и -s .
В изолированном режиме sys.path не содержит ни каталога скрипта, ни каталога пакетов сайта пользователя. Все переменные среды PYTHON* также игнорируются.Дополнительные ограничения могут быть наложены, чтобы предотвратить внедрение пользователем вредоносного кода.
Новинка в версии 3.4.
Удалите операторы assert и любой код, зависящий от значения __debug__ . Увеличьте имя файла для скомпилированных ( байт -код ) файлов, добавив .opt-1 перед расширением .pyc (см.PEP 488 ). См. также PYTHONOPTIMIZE .
Изменено в версии 3.5: Измените имена файлов .pyc в соответствии с PEP 488 .
Сделайте -O , а также отбросьте строки документации. Увеличьте имя файла для скомпилированных ( байт -код ) файлов, добавив .opt-2 перед расширением .pyc (см.PEP 488 ).
Изменено в версии 3.5: Измените имена файлов .pyc в соответствии с PEP 488 .
Не добавляйте потенциально небезопасный путь к sys.path :
- python -m module : не добавляйте текущий рабочий каталог.
- python script.py : не добавляйте каталог скрипта в начале. Если это символическая ссылка, разрешите символические ссылки.
- python -c code и командные строки python (REPL): не добавляйте пустую строку, которая означает текущий рабочий каталог.
См. также переменную среды PYTHONSAFEPATH и параметры -E и -I (изолированные).
Новинка в версии 3.11.
Не отображайте сообщения об авторских правах и версии даже в интерактивном режиме.
Новинка в версии 3.2.
Включите рандомизацию хэшей. Этот параметр действует только в том случае, если для переменной среды PYTHONHASHSEED 0 , поскольку рандомизация хэшей включена по умолчанию.
В предыдущих версиях Python эта опция включает рандомизацию хэшей, так что __hash__() объектов str и bytes «приправлены» непредсказуемым случайным значением. Хотя они остаются постоянными в пределах отдельного процесса Python, они непредсказуемы между повторными вызовами Python.
Рандомизация хэшей предназначена для защиты от отказа в обслуживании, вызванного тщательно подобранными входными данными, которые используют наихудшую производительность конструкции dict, сложность O(n 2 ). Подробнее см. http://www.ocert.org/advisories/ocert-2011-003.html .
PYTHONHASHSEED позволяет установить фиксированное значение секрета хэш-кода.
Изменено в версии 3.7:Опция больше не игнорируется.
Новое в версии 3.2.3.
PEP 370 — Каталог сайтов-пакетов для каждого пользователя
site модуля и связанные с ним манипуляции с sys.path , зависящие от сайта. Также отключите эти манипуляции, если site будет явно импортирован позже (вызовите site.main() , если вы хотите, чтобы они запускались).
Заставить потоки stdout и stderr быть небуферизованными.Этот параметр не влияет на поток stdin.
Изменения в версии 3.7:Текстовый слой потоков stdout и stderr теперь небуферизован.
Печатайте сообщение каждый раз, когда модуль инициализируется, показывая место (имя файла или встроенный модуль), из которого он загружается. Если задано дважды ( -vv ), вывести сообщение для каждого файла, который проверяется при поиске модуля. Также предоставляет информацию об очистке модуля при выходе.
Изменено в версии 3.10: модуль site сообщает об обрабатываемых путях и файлах .pth .
Предупреждающий контроль. Механизм предупреждений Python по умолчанию печатает предупреждающие сообщения в sys.stderr .
Самые простые настройки применяют определенное действие безоговорочно ко всем предупреждениям,выдаваемым процессом (даже к тем,которые по умолчанию игнорируются):
Имена действий могут быть сокращены по желанию, и интерпретатор преобразует их в соответствующее имя действия. Например, -Wi — это то же самое, что -Wignore .
Полная форма аргументации такова:
Пустые поля соответствуют всем значениям; завершающие пустые поля могут быть опущены. Например -W ignore::DeprecationWarning игнорирует все предупреждения DeprecationWarning.
Поле действия описано выше, но применяется только к предупреждениям, которые соответствуют остальным полям.
Поле сообщения должно соответствовать всему предупреждающему сообщению; это совпадение нечувствительно к регистру.
Поле категории соответствует категории предупреждения (например, DeprecationWarning ). Это должно быть имя класса; проверка соответствия, является ли фактическая категория предупреждения сообщения подклассом указанной категории предупреждения.
Поле модуля соответствует (полному) имени модуля; это совпадение чувствительно к регистру.
Поле Lineno соответствует номеру строки, где ноль соответствует всем номерам строк и, таким образом, эквивалентен пропущенному номеру строки.
Можно указать несколько параметров -W ;когда предупреждение соответствует более чем одному параметру, выполняется действие для последнего совпадающего параметра. Недопустимые параметры -W игнорируются (хотя при первом предупреждении печатается предупреждающее сообщение о недопустимых параметрах).
Предупреждения также можно контролировать с помощью переменной среды PYTHONWARNINGS и из программы Python с помощью модуля warnings Например, функция warnings.filterwarnings() может использоваться для использования регулярного выражения в предупреждающем сообщении.
Пропустите первую строку исходного кода, разрешив использование не-Unix-форм #!cmd . Это предназначено только для взлома, специфичного для DOS.
Зарезервировано для различных опций,специфичных для конкретной реализации.В настоящее время CPython определяет следующие возможные значения:
- -X faulthandler для включения faulthandler ;
- -X showrefcount для вывода общего счетчика ссылок и количества использованных блоков памяти при завершении программы или после каждого оператора в интерактивном интерпретаторе. Это работает только в отладочных сборках .
- -X tracemalloc , чтобы начать отслеживать выделение памяти Python с помощью модуля tracemalloc . По умолчанию в трассировке трассировки сохраняется только самый последний кадр. Используйте -X tracemalloc=NFRAME , чтобы начать трассировку с ограничением трассировки кадрами NFRAME . См. tracemalloc.start() для получения дополнительной информации.
- -X int_max_str_digits настраивает ограничение длины преобразования целочисленной строки . См. также PYTHONINTMAXSTRDIGITS .
- -X importtime , чтобы показать, сколько времени занимает каждый импорт. Он показывает имя модуля, совокупное время (включая вложенный импорт) и собственное время (исключая вложенный импорт). Обратите внимание, что его вывод может быть нарушен в многопоточном приложении. Типичное использование: python3 -X importtime -c ‘import asyncio’ . См. также PYTHONPROFILEIMPORTTIME .
- -X dev : включить режим разработки Python , вводя дополнительные проверки времени выполнения, которые слишком дороги для включения по умолчанию.
- -X utf8 включает режим Python UTF-8 . -X utf8=0 явно отключает режим Python UTF-8 (даже если в противном случае он активировался бы автоматически).
- -X pycache_prefix=PATH позволяет записывать файлы .pyc в параллельное дерево с корнем в данном каталоге, а не в дерево кода. См. также PYTHONPYCACHEPREFIX .
- -X warn_default_encoding выдает EncodingWarning , когда для открытия файлов используется кодировка по умолчанию, зависящая от локали. См. также PYTHONWARNDEFAULTENCODING .
- -X no_debug_ranges отключает включение таблиц, отображающих дополнительную информацию о местоположении (конечная строка, смещение начального столбца и смещение конечного столбца) для каждой инструкции в объектах кода. Это полезно, когда требуются меньшие объекты кода и файлы pyc, а также подавление дополнительных визуальных индикаторов местоположения, когда интерпретатор отображает трассировку. См. также PYTHONNODEBUGRANGES .
- -X frozen_modules определяет, будут ли замороженные модули игнорироваться механизмом импорта. Значение «on» означает, что они импортируются, а «off» означает, что они игнорируются. По умолчанию включено, если это установленный Python (обычный случай). Если он находится в разработке (запускается из исходного дерева), то по умолчанию «выключено». Обратите внимание, что замороженные модули «importlib_bootstrap» и «importlib_bootstrap_external» используются всегда, даже если этот флаг установлен в «выключено».
Он также позволяет передавать произвольные значения и получать их через словарь sys._xoptions .
Изменено в версии 3.2: Добавлен параметр -X .
Новое в версии 3.3: опция -X faulthandler .
Новое в версии 3.4: -X showrefcount и -X tracemalloc .
Новое в версии 3.6: параметр -X showalloccount .
Новое в версии 3.7: -X importtime , -X dev и -X utf8 .
Новое в версии 3.8: параметр -X pycache_prefix . Параметр -X dev теперь регистрирует исключения close() io.IOBase .
Изменено в версии 3.9: Используя параметр -X dev , проверяйте аргументы кодировки и ошибок при операциях кодирования и декодирования строк.
Параметр -X showalloccount был удален.
Новое в версии 3.10: параметр -X warn_default_encoding .
Не рекомендуется с версии 3.9, удалено в версии 3.10: параметр -X oldparser .