Введение в 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. Например, мы создаем функцию вычисления площади прямоугольника.
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 Enterprise Edition (Java EE) остается одной из ведущих технологий и платформ на основе Java. Данная книга представляет собой логичное пошаговое руководство, в котором подробно описаны многие спецификации и эталонные реализации Java EE 7. Работа с ними продемонстрирована на практических примерах. В этом фундаментальном издании также используется новейшая версия инструмента GlassFish, предназначенного для развертывания и администрирования примеров кода. Книга написана ведущим специалистом по обработке запросов на спецификацию Java EE, членом наблюдательного совета организации Java Community Process (JCP)
Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Система сборки программ, используемая во FreeBSD, имеет значительно большие возможности, чем те, которые мы задействовали. Какие это возможности и как их использовать в своих портах?
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.