Введение в Python - [9]

Шрифт
Интервал

>| return b # Незачем использовать else. Если мы дошли до этой строки, то b, точно не меньше чем a

>|

>| # присваиваем результат функции bigger переменной num

>| num = bigger(23, 42)


Область видимости

Некоторые переменные скрипта могут быть недоступны некоторым областям программы. Все зависит от того, где вы объявили эти переменные.

В Python две базовых области видимости переменных:

* Глобальные переменные

* Локальные переменные

Переменные объявленные внутри тела функции имеют локальную область видимости, те что объявлены вне какой-либо функции имеют глобальную область видимости.

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

Например:


>| # глобальная переменная age

>| age = 44

>| def info():

>| print age # Печатаем глобальную переменную age

>|

>| def local_info():

>| age = 22 # создаем локальную переменную age

>| print age

>|

>| info() # напечатает 44

>| local_info() # напечатает 22


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

Например:


>| # глобальная переменная age

>| age = 13

>|

>| # функция изменяющая глобальную переменную

>| def get_older():

>| global age

>| age += 1

>| print age # напечатает 13

>| get_older() # увеличиваем age на 1

>| print age # напечатает 14


Рекурсия

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

Напомним, что факториалом числа, например, 5 является произведение всех натуральных (целых) чисел от 1 до 5. То есть, 1 * 2 * 3 * 4 * 5

Рекурсивная функция вычисления факториала на языке Python будет выглядеть так:


>| def fact(num):

>| if num == 0:

>| return 1# По договоренности факториал нуля равен единице

>| else:

>| return num * fact(num - 1)

>| # возвращаем результат произведения num и результата возвращенного функцией fact(num - 1)


Однако следует помнить, что использование рекурсии часто может быть неоправданным. Дело в том, что в момент вызова функции в оперативной памяти компьютера резервируется определенное количество памяти, соответственно чем больше функций одновременно мы запускаем - тем больше памяти потребуется, что может привести к переполнению стека (stack overflow) и программа завершится аварийно, не так как предполагалось. Учитывая это, там где это возможно, вместо рекурсии лучше применять циклы.

Рецепт создания функции в Python

Существует следующий алгоритм - рекомендация по созданию функции в Python. Например, мы создаем функцию вычисления площади прямоугольника.

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

>| # На данном этапе мы еще не указываем имена переменных

>| def rectangle_area_finder( ):

>| """

>| >>> rectangle_area_finder(3, 5)

>| 15

>| >>> rectangle_area_finder(17.2, 6)

>| 103.2

>| """


2. Указать типы данных, которые принимает функция и тип данных, который она возвращает

>| # функция принимает два числа, а возвращает одно

>| def rectangle_area_finder( ):

>| """

>| (num, num) -> num

>| >>> rectangle_area_finder(3, 5)

>| 15

>| >>> rectangle_area_finder(17.2, 6)

>| 103.2

>| """


3. Подобрать подходящие названия для переменных

>| # Поскольку это математическая функция нам вполне подойдут имена a и b

>| def rectangle_area_finder(a, b):

>| """

>| (num, num) -> num

>| >>> rectangle_area_finder(3, 5)

>| 15

>| >>> rectangle_area_finder(17.2, 6)

>| 103.2

>| """


4. Написать краткое, но содержательное описание функции

>| def rectangle_area_finder(a, b):

>| """

>| (num, num) -> num

>| Returns an area of a rectangle with given sides a and b.

>| >>> rectangle_area_finder(3, 5)

>| 15

>| >>> rectangle_area_finder(17.2, 6)

>| 103.2

>| """


5. Написать собственно тело функции

>| def rectangle_area_finder(a, b):

>| """

>| (num, num) -> num

>| Returns an area of a rectangle with given sides a and b.

>| >>> rectangle_area_finder(3, 5)

>| 15

>| >>> rectangle_area_finder(17.2, 6)

>| 103.2

>| """

>| return a * b


6. Функция готова! Осталось вызвать ее с указанными в примерах аргументами



Как видно, при вызове команды help() с именем нашей функции в качестве аргумента мы получаем написанную нами документацию.

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

Функциональное программирование в Python: lambda, zip, filter, map reduce

Published: 09 March 2017

Функциональным называется такой подход к процессу программирования, в программа рассматривается как вычисление математических функций, при этом не используются состояния и изменяемые объекты. Как правило, когда говорят о элементах функционального программировании в Python, то подразумеваются следующие функции:


Рекомендуем почитать
Изучаем Java EE 7

Java Enterprise Edition (Java EE) остается одной из ведущих технологий и платформ на основе Java. Данная книга представляет собой логичное пошаговое руководство, в котором подробно описаны многие спецификации и эталонные реализации Java EE 7. Работа с ними продемонстрирована на практических примерах. В этом фундаментальном издании также используется новейшая версия инструмента GlassFish, предназначенного для развертывания и администрирования примеров кода. Книга написана ведущим специалистом по обработке запросов на спецификацию Java EE, членом наблюдательного совета организации Java Community Process (JCP)


Pro Git

Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.


Java 7

Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.


Фундаментальные алгоритмы и структуры данных в Delphi

Книга "Фундаментальные алгоритмы и структуры данных в Delphi" представляет собой уникальное учебное и справочное пособие по наиболее распространенным алгоритмам манипулирования данными, которые зарекомендовали себя как надежные и проверенные многими поколениями программистов. По данным журнала "Delphi Informant" за 2002 год, эта книга была признана сообществом разработчиков прикладных приложений на Delphi как «самая лучшая книга по практическому применению всех версий Delphi».В книге подробно рассматриваются базовые понятия алгоритмов и основополагающие структуры данных, алгоритмы сортировки, поиска, хеширования, синтаксического разбора, сжатия данных, а также многие другие темы, тесно связанные с прикладным программированием.


Питон — модули, пакеты, классы, экземпляры

Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.


Как пасти котов. Наставление для программистов, руководящих другими программистами

«Как пасти котов» – это книга о лидерстве и руководстве, о том, как первое совмещать со вторым. Это, если хотите, словарь трудных случаев управления IT-проектами. Программист подобен кошке, которая гуляет сама по себе. Так уж исторически сложилось. Именно поэтому так непросто быть руководителем команды разработчиков. Даже если вы еще месяц назад были блестящим и дисциплинированным программистом и вдруг оказались в роли менеджера, вряд ли вы знаете, с чего надо начать, какой выбрать стиль руководства, как нанимать и увольнять сотрудников, проводить совещания, добиваться своевременного выполнения задач.