Скрипты python#

Написание и запуск скриптов — второй способ взаимодействия с python, который будет здесь рассмотрен. Python скрипт (программа) — файл с исходным кодом python, который может быть проинтерпретирован интерпретатором. Исходный код в скрипте всегда исполняется сверху вниз, начиная с первой строки и заканчивая последней (если по пути не встретилось принудительного завершения исполнения программы). В этом отношении все очень похоже на C/C++, за исключением точки входа: в python это самое начало скрипта, в C++ — функция main.

Итого, запустить python скрипт почти полностью эквивалентно тому, чтобы поочереди вбить все инструкции внутри скрипта в интерактивную оболочку. Использовано выражение “почти полностью эквивалентно” из-за уже упомянутой функции quit(), а также из-за особенностей взаимодействия интерактивной оболочки со стандартным потоком вывода.

Принято сохранять файлы с исходным кодом python в файлы с расширением .py.

Hello, World!#

Напишем первый скрипт на python. По традиции это будет программа, печатающая строку “Hello, World!” в стандартный поток вывода.
Для такой программы в python достаточно файла из всего одной строки.

print("Hello, World!")

Если сохранить эту инструкцию в файл с названием helloworld.py, то его можно запустить следующей командой в командной строке или Anaconda prompt.

python helloworld.py

Используется та же самая команда python, что и для запуска интерактивной оболочки, но теперь аргументом ей указывается имя файла с исходным кодом python, который необходимо исполнить.

../_images/helloworld.gif

Стандартные потоки ввода и вывода#

Из примера helloworld.py можно заметить, что для вывода строки “Hello, World!” в стандартный поток вывода используется функция print. Тут и проявляется незначительная разница с интерактивной оболочкой, в которой результат вычисления выражения сразу и выводится в стандартный поток вывода, если он не присваивается в переменную. В случае скриптов такого не происходит и необходимо явно вызывать функцию print, чтобы что-то вывести в стандартный поток вывода.

Функция print принимает произвольное количество аргументов и выводит их все в стандартном потоке вывода в том же порядке, разделяя значения пробелом и в самом конце совершая перенос строки. Опциональными параметрами функции можно настроить:

  • поток вывода (параметр file, по умолчанию стандартный поток вывода);

  • разделитель значений (параметр sep, по умолчанию пробел " ");

  • завершающая строка (параметр end, по умолчанию перенос строки "\n").

За взаимодействие со стандартным потоком ввода отвечает функция input, которая считывает одну строку из стандартного потока ввода и возвращает её в неизменном виде. Чтобы продемонстрировать принцип действия этой функции, слегка модифицируем предыдущий пример, чтобы он спрашивал имя пользователя и приветствовал его по введенному имени.

print("Hello, what is your name?")
name = input()
print("Hi, ", name, "!", sep="")

Сохранив и запустив этот скрипт, вы должны увидеть сообщение "Hello, what is your name?", после которого программа должна войти в режим ожидания, т.к. запустилось исполнение функции input(), а в стандартном потоке ввода нет строки, которую эта функция смогла бы считать. После того как вы наберете своё имя и нажмете клавишу Enter, строка с вашим именем попадёт в стандартный поток ввода и функция input() вернет эту строку вызывающему коду. Далее эта строка выведется между строками "Hi" и "!" с разделителем в виде пустой строки (параметр sep) с помощью функции print.

../_images/helloname.gif

В примере выше функция input() вызывалась без аргумента, но можно использовать её необязательный аргумент, чтобы сократить количество строк в примере: указанная в качестве аргумента функции input() строка выводится в стандартный поток вывода без переноса строки и только затем сканируется стандартный поток ввода.

name = input("Hello, what is your name?\n")
print("Hi, ", name, "!", sep="")

Теперь обратим внимание на то, что функция input всегда возвращает именно строку — значение типа str. Т.е. если вы считываете число, то его необходимо явно преобразовать к необходимому числовому типу. Для демонстрации рассмотрим программу, которая спрашивает возраст пользователя и сообщает пользователю его возраст через один год.

age = int(input("What is your age? "))
print("In a year you are going to be ", age + 1, " years old!", sep="")

В первой строке программы у пользователя спрашивается его возраст и введенное им значение приводится к типу int. Во второй строке выводится сколько ему будет лет по прошествии одного года. При этом обратите внимание, что выражение age + 1 привело бы к ошибке, если бы мы не привели age к целочисленному типу конструктором типа int. Но при передаче age + 1 в функцию print вовсе не обязательно приводить целочисленное значение к строковому, т.к. функция print это сделает за нас.

../_images/age.gif

Среды разработки#

Выше было продемонстрировано, что, чтобы писать программы на python, достаточно текстового редактора, а чтобы их исполнять — интерпретатора python. Но использование специальной среды разработки (IDE) может значительно упростить процесс разработки. Ниже перечисленны три самые популярные IDE.

  • PyCharm — одна из самых популярных полноценных сред разработки для python. Даже в бесплатную версию Community Edition встроенно большинство необходимых разработчику инструментов.

  • Visual Studio Code — бесплатная сравнительно легковесная среда разработки, которая с помощью расширений может быть задействована и для разработки на python.

  • Spider — бесплатная среда разработки для python, специально нацеленная на ученных. Распространяется вместе с Anaconda, но можно скачать и отдельно.

Автор курса в основном пользуется VS Code, так как она быстро загружается и её функционала обычно хватает, но в масштабных проектах иногда отдаёт предпочтение PyCharm. Для самых начинающих можно порекомендовать Thonny — легковесную среду разработки, которая позволяет наглядно пошагово визуализировать процесс исполнения программы, что может оказаться полезным при изучении принципов работы языка.

Области применения скриптов#

Скрипты — самая основная форма взаимодействия с python: большинство программ на python реализуется в виде скриптов, так как исходный код из скриптов можно переиспользовать (можно писать программы в модульной структуре), скриптами и их версиями можно управлять с помощью системы управления версиями и т.д.

Тем не менее в научной среде часто пользуются блокнотами jupyter, которые позволяют в интерактивном режиме запускать исходный код на python и наблюдать результаты его исполнения в одном месте. Про jupyter речь пойдет на следующей странице.