| Использование функций в языке 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, вызовы системных команд своими собственными. Прибавьте себе несколько очков, если вы добавили в сценарии несколько новых функций и предусмотрели их вызов из главной функции.
Set as favorite
Bookmark
Email This
Hits: 220 Комментарии (0)RSS feed CommentsНаписать комментарий |