Step 1 (S-15463)

From Stepik Wiki
Jump to: navigation, search

Step on Stepik: https://stepik.org/lesson/3377/step/1

S-15463-1.png

Чем больше размер ваших программ, тем чаще у вас будет возникать желания выделить какие-то фрагменты в отдельные функции. А начиная с некоторого момента, оказывается. удобно выделить некоторые функции в отдельный файл. Для того, чтобы это делать, можно использовать модуль. Фактически модуль представляет собой отдельный файл, который содержит некоторые функции и данные. Функции и объекты из одного модуля можно импортировать (подгружать) в другой модуль. Имя модуля определяется именем файла, в котором он записан. Как правило в Python, имя файла - это имя модуля плюс расширение .py.

S-15463-2.png

Как импортировать модуль в нашу программу? Рассмотрим пример: у нас есть модуль my_module, который записан в файле my_module.py, и в нем определена функция foo.

S-15463-3.png

Для того, чтобы импортировать модуль внутрь нашей программы, нам необходимо записать ключевое слово import и после него указать имя модуля.

S-15463-4.png

После этого мы можем вызывать функции из модуля my_module.py. Для вызова функции из импортируемых модулей используется следующая конструкция - указывается имя модуля и далее через точку имя, вызываемой функции.

S-15463-5.png

Это один из стандартных способов вызова функции из модуля. Существуют и другие способы. Во-первых мы можем явно импортировать только одну функцию из модуля. Для этого используется конструкция:

S-15463-6.png

В ней мы указываем, что из модуля my_module нужно импортировать функцию foo.

В этом случае можем вызвать функцию foo, указывая только имя.

S-15463-7.png

Возможно импортировать из модуля сразу все функции. Для этого в предыдущую конструкцию нужно поставить символ * (звездочка) вместо имени функции foo.

S-15463-8.png

Функции из модуля будут доступны по имени. И наконец, можно импортировать из модуля нужную нам функции и связать ее внутри нашей программы с другим именем.

S-15463-9.png

Теперь функция foo из модуля будет доступна по имени my_foo. Такая конструкция может быть полезной в случае, если в нашей программе уже определена функция foo.

Помимо написания своих модулей, мы можем использовать огромное количество модулей стандартной библиотеки Python. Стандартная библиотека Python предоставляет обширные возможности, поэтому иногда говорят, что Python поставляется с "батарейками в комплекте". Со списком стандартных модулей можно ознакомится по ссылке - https://docs.python.org/3/library/index.html

S-15463-10.png

Список модулей действительно велик, в нем есть модули для работы с операционной системой, различными форматами данных, математических вычислений и т.д. Рассмотреть все модули в данном курсе мы не сможем. Вы можете самостоятельно поискать по ключевым словам в документации к стандартной библиотеке, необходимый вам, функционал.

S-15463-11.png

Мы же рассмотрим пару примеров.

Модуль sys обеспечивает доступ к некоторым переменным и функциям, взаимодействующим с интерпретатором Python. В частности, используя этот модуль, мы можем получать аргументы командной строки. При вызове программы мы можем указывать некоторые параметры в командной строке. Например, при запуске интерпретатора мы можем указать параметр -h, в этом случае интерпретатор не будет запущен, а выведется справочная информация на экран.

S-15463-12.png

Аналогично, мы можем написать свою программу, которая будет принимать какие-то параметры и обрабатывать значения этих параметров. Напишем программу, которая будет выводить число аргументов, с которыми она была запущена.

S-15463-13.png

Список переданных параметров доступен по sys.argv. С помощью функции len мы можем определить количество элементов этого списка. Сохраним нашу программу в файле prog.py

Если мы запустим нашу программу

S-15463-14.png

она выведет значение 1. Это произошло потому, что первый аргумент списка sys.argv - имя файла с программой. Запустим программу еще раз, указав в качестве параметров два числа: 5 и -23.

S-15463-15.png

Программа вывела 3.


Еще один достаточно полезный модуль стандартной библиотеки - subprocess. Он позволяет вызывать внешние процессы. Например, из своей программы мы можем вызвать другую программу. Для этого можно использовать функцию call.

S-15463-16.png

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

S-15463-17.png

По умолчанию вывод вызываемой (внешней) программы направляется на стандартный вывод (на консоль), именно поэтому в выводе нашей программы мы увидели справку к интерпретатору python. Таким образом смешивается вывод нашей программы и запущенной внешней программы. Это нужно учитывать при написании программ. Другой способ избежать "мешанины" - перенаправить вывод внешней программы (например: в файл)

S-15463-18.png

Программа завершила работу, вывода на консоль нет. В директории появился файл out_file.txt.

S-15463-19.png

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

S-15463-20.png

Аналогичным образом можно поступать c выводом сообщений об ошибках.