Введение в 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, то подразумеваются следующие функции:


Рекомендуем почитать
Программное обеспечение и его разработка

Автор книги — американский специалист по программированию, один из руководителей фирмы IBM, в своей книге делает попытку изложить общие проблемы создания программного обеспечения, его сопровождения и использования. Особенно подробно рассматриваются все фазы разработки программ разных типов. Изложение ясное, удачно иллюстрировано примерами.Для программистов разной квалификации и пользователей ЭВМ.fb2: ВНИМАНИЕ. В тексте присутствуют таблицы. Рекомендуется читать файл с помощью программы, поддерживающей их отображение.


Изучаем Java EE 7

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


Java 7

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


Примеры использования Паттерн Singleton (Одиночка)

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


Создаем порт для FreeBSD своими руками. Часть II

Система сборки программ, используемая во FreeBSD, имеет значительно большие возможности, чем те, которые мы задействовали. Какие это возможности и как их использовать в своих портах?


FreeBSD - полезные советы

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