Опубликован: 14.06.2015 | Доступ: свободный | Студентов: 7375 / 1136 | Длительность: 09:49:00
Авторские права: Creative Commons Attribution 3.0
Самостоятельная работа 4:

Функции

< Самостоятельная работа 1 || Самостоятельная работа 4: 1234

8.7. Определение и использование

Если собрать вместе весь код из предыдущего параграфа, то получим следующее:

def print_lyrics():
       print "I'm a lumberjack, and I'm okay."
       print 'I sleep all night and I work all day.'
def repeat_lyrics():
       print_lyrics()
       print_lyrics()
repeat_lyrics()

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

Как и следовало ожидать, вы должны предварительно создать функцию, прежде чем сможете ее выполнить. Иными словами, определение функции должно быть выполнено перед ее первым запуском.

8.8. Поток исполнения

Для того чтобы убедиться, что функция определяется до ее первого использования, вы должны знать порядок, в котором выполняются инструкции, он называется потоком исполнения (flow of execution).

Исполнение обычно начинается с первой инструкции программы. Инструкции выполняются по одной сверху вниз.

Определение функций не изменяют порядок исполнения программы, но запомните, что инструкции внутри функции не исполняются до вызова функции.

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

Это звучит достаточно просто, пока вы не вспомните, что одна функция может вызывать другую. В то время как в середине одной функции, программа может выполнять инструкции из другой функции. Но во время выполнения этой новой функции, программа может выполнять еще одну функцию!

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

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

8.8. Параметры и аргументы

Некоторые из встроенных функций требуют передачи входных аргументов. Например, когда вы вызываете math.sin, вы передаете число в качестве входного аргумента. Некоторые функции принимают больше одного аргумента, например, в math.pow передается два аргумента: основание и степень.

Внутри функции, аргументы, присвоенные переменным, называются параметрами (parameters). Пример определения функции, которой передается аргумент:

def print_twice(bruce):
       print bruce
       print bruce

Эта функция присваивает аргумент параметру с именем bruce. Когда вызывается функция, она дважды выводит на экран значение параметра (что бы это ни было).

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

>>> print_twice('Spam')
Spam
Spam
>>> print_twice(17)
17
17
>>> print_twice(math.pi)
3.14159265359
3.14159265359

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

>>> print_twice('Spam '*4)
Spam Spam Spam Spam
Spam Spam Spam Spam
>>> print_twice(math.cos(math.pi))
-1.0
-1.0

Аргумент вычисляется перед вызовом функции, поэтому в примере выражения 'Spam '*4 и math.cos(math.pi) вычисляются только один раз.

Вы можете использовать переменные в качестве аргументов:

>>> michael = 'Eric, the half a bee.'
>>> print_twice(michael)
Eric, the half a bee.
Eric, the half a bee.

Имя переменной, которое мы передаем в качестве аргумента (michael), не имеет ничего общего с параметром (bruce). Не важно, какое значение было передано в вызывающую функцию; здесь, в print_twice, мы называем все bruce.

< Самостоятельная работа 1 || Самостоятельная работа 4: 1234
Алексей Виноградов
Алексей Виноградов

Видеокурс выложен на сайте Altube.ru вместо Youtube и плеер Altube не поддерживает субтитры. Прошу решить вопрос о предоставлении русских субтитров в этом англоязычном видеокурсе.

Петр Олейников
Петр Олейников

Данные файлы неоходимы не только для самостоятельных работ, но и для тестов. А по ссылкам в лекциях они не доступны, выдает ошибку 404.