Skip to content

Home Администрирование Использование функций в языке Python
Использование функций в языке Python

Ранее мы узнали, как выполняются инструкции, что само по себе весьма полезно, т. к. это означает, что мы в состоянии автоматизировать выполнение некоторых операций, которые раньше выполнялись вручную. Следующим шагом к нашему программному коду автоматизации будет создание функций. Если вы еще не знакомы с функциями в языке Bash или в каком-либо другом языке программирования, то просто представляйте их себе как мини-сценарии. Функции позволяют создавать блоки инструкций, которые работают в группе. Это немного похоже на сценарий Bash с двумя командами, написанный нами ранее. Одно из отличий состоит в том, что вы можете включить в сценарий множество функций. В конечном счете можно весь программный код сценария расположить в функциях и затем запускать эти мини-программы в нужное время в своем сценарии.

Теперь настало время поговорить об отступах. В языке Python строки, принадлежащие одному и тому же блоку программного кода, должны иметь одинаковые отступы. В других языках, таких как Bash, когда определяется функция, ее тело заключается в фигурные скобки. В языке Python все строки в скобках должны иметь одинаковые отступы. Это может сбивать с толку тех, кто только начинает изучать язык, но через некоторое время это войдет в привычку и вы заметите, что выполнение этого требования повышает удобочитаемость программного кода. Если при работе с какими-либо примерами из книги у вас появляются ошибки, убедитесь для начала, что в исходных текстах правильно соблюдены отступы. Обычно один шаг отступа принимают равным четырем пробелам.

Рассмотрим, как работают функции в языке Python и Bash. Если у вас по-прежнему открыта интерактивная оболочка IPython, вы можете не создавать файл сценария на языке Python, хотя это и не возбраняется. Просто введите следующий текст в строке приглашения оболочки IPython:

В этом примере инструкция print помещена в функцию. Теперь можно не только вызвать эту функцию позднее, но и вызвать ее столько раз, сколько потребуется. В строке [4] была использована идиома (прием) для выполнения функции пять раз. Если раньше вам такой прием не встречался, постарайтесь понять, что он вызывает функцию пять раз.

То же самое можно сделать непосредственно в командной оболочке Bash. Ниже демонстрируется один из способов:

В примере на языке Bash была создана простая функции shfunc, которая затем была вызвана пять раз, точно так же, как это было сделано ранее с функцией в примере на языке Python. Примечательно, что в примере на языке Bash потребовалось больше «багажа», чтобы реализовать то же самое, что и на языке Python. Обратите внимание на отличия цикла for в языке Bash от цикла for в языке Python. Если это ваша первая встреча с функциями в Bash или Python, вам следует поупражняться в создании каких-нибудь других функций в окне IРу-thon, прежде чем двигаться дальше.

В функциях нет ничего таинственного, и попытка написать несколько функций в интерактивной оболочке поможет ликвидировать налет таинственности в случае, если это ваш первый опыт работы с функциями. Ниже приводится пара примеров простых функций:

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

Пример 1.4. Преобразованный сценарий сбора информации о системе на языке Python: pysysinfo_func.py

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

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

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

Для сравнения также используем функции для предыдущего сценария на языке Bash, выполняющего сбор информации о системе, как показано в примере 1.5.

Пример 1.5. Преобразованный сценарий сбора информации о системе на языке Bash: bashsysinfo_func.sh

tf!/usr/bin/env bash

((Сценарий сбора информации о системе

((Команда 1

function uname_func ()

{

UNAME="uname -а"

printf "Gathering system information with the $UNAME command: \n\n"

SUNAME }

((Команда 2

function disk_func ()

{

DISKSPACE="df -h"

printf "Gathering diskspace information with the $DISKSPACE command: \n\rf

SDISKSPACE }

function main () {

uname_func

disk func

Взглянув на наш пример на языке Bash, можно заметить немало схожего с аналогичным ему сценарием на языке Python. Здесь также созданы две функции, которые затем вызываются из главной функции. Если это ваш первый опыт работы с функциями, то мы могли бы порекомендовать вам закомментировать вызов главной функции в обоих сценариях, поставив в начале строки символ решетки (#), и попробовать запустить их еще раз. На этот раз в результате запуска сценариев вы не должны получить ровным счетом ничего, потому что программа хотя и выполняется, но она не вызывает две свои функции.

Теперь вы можете считать себя программистом, способным писать простые функции на обоих языках, Bash и Python. Программисты учатся работая, поэтому сейчас мы настоятельно рекомендуем вам изменить в обеих программах, на языке Bash и Python, вызовы системных команд своими собственными. Прибавьте себе несколько очков, если вы добавили в сценарии несколько новых функций и предусмотрели их вызов из главной функции.

Комментарии (0)

RSS feed Comments

Написать комментарий

smaller | bigger

busy
 

Регистрация




Top