Красота Дмитрий - Введение в Python стр 6.

Шрифт
Фон

7 | # Корректное использование функции

8 | bigger(5, 6)

9 | # Некорректное использование функции

0 | bigger()

1 | bigger(3)

2 | bigger(12, 7, 3)

Аргументы - ключевые слова

Например:

| def person(name, age):

| print name, "is", age, "years old"

|

| # Хотя в описании функции первым аргументом идет имя, мы можем вызвать функцию вот так

|

| person(age = 23, name = "John")

Аргументы, заданные по-умолчанию

Например:

| def space(planet_name, center = "Star"):

| print planet_name, "is orbiting a", center

| # Можно вызвать функцию space так:

| space("Mars")

| # В результате получим: Mars is orbiting a Star

|

| # Можно вызвать функцию space иначе:

| space("Mars", "Black Hole")

| # В результате получим: Mars is orbiting a Black Hole

Аргументы произвольной длины

Например:

| def unknown( * args):

| for argument in args:

| print argument

|

| unknown("hello", "world") # напечатает оба слова, каждое с новой строки

| unknown(1, 2, 3, 4, 5) # напечатает все числа, каждое с новой строки

| unknown() # ничего не выведет

Ключевое слово return
return None

Например:

| def bigger(a,b):

| if a > b:

| return a # Если a больше чем b, то возвращаем b и прекращаем выполнение функции

| 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() с именем нашей функции в качестве аргумента мы получаем написанную нами документацию.

Ваша оценка очень важна

0
Шрифт
Фон

Помогите Вашим друзьям узнать о библиотеке