How to Think Like a Computer Scientist: Learning with Python 2nd Edition. / Как стать программистом: учимся вместе с Python. Второе издание.: Chapter 3 Functions

← →
Английский оригинал Перевод на русский

Сожалеем, но текст оригинала доступен только зарегистрированным пользователям.

3 Функции

czech 27.06.10 в 02:59

0

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

czech 27.06.10 в 03:01

0

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

czech 27.06.10 в 03:08

0

def ИМЯ( список параметров ): операции

czech 27.06.10 в 03:08

0

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

czech 27.06.10 в 06:02

0

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

czech 27.06.10 в 06:06

0

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

czech 27.06.10 в 06:08

0

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

czech 27.06.10 в 06:11

0

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

czech 27.06.10 в 06:11

0

def new_line():
    print # операция print выводит пустую строку

czech 27.06.10 в 06:12

0

Функция называется new_line. Пустые скобки означают, что параметров нет. Тело содержит только одну оберацию, которая выводит пустую строку. (Вот что происходит, если использовать команду print без аргументов).

czech 27.06.10 в 06:18

0

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

czech 27.06.10 в 06:20

0

print "First Line."
new_line()
print "Second Line."

czech 27.06.10 в 06:22

0

На выходе программы получим следующее:

czech 27.06.10 в 06:22

0

First line.

czech 27.06.10 в 06:22

0

Second line

czech 27.06.10 в 06:22

0

Пустая строка между двумя надписями - это результат вызова функции new_line(). А что, если нам нужно больше пустых строк между надписями? Мы можем вызвать функцию несколько раз:

czech 27.06.10 в 06:25

0

print "First Line."
new_line()
new_line()
new_line()
print "Second Line."

czech 27.06.10 в 06:25

0

Или мы можем написать новую функцию three_lines, которая будет вставлять три пустых строки:

czech 27.06.10 в 06:26

0

def three_lines():
    new_line()
    new_line()
    new_line()

czech 27.06.10 в 06:26

0

print "First Line."
three_lines()
print "Second Line."

czech 27.06.10 в 06:27

0

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

czech 27.06.10 в 06:30

0

Обратите внимание на пару моментов в этой программе:

czech 27.06.10 в 06:30

0

Вы можете запускать функцию несколько раз. На самом деле, функции для этого и нужны. Вы можете вызывать одну функцию из тела другой функции; так в функции three_lines происходит вызов new_line.

czech 27.06.10 в 06:32

0

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

czech 27.06.10 в 06:56

0

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

czech 27.06.10 в 07:29

0

Объединим вместе фрагменты кода из предыдущих примеров в скрипт с именем tryme1.py:

czech 27.06.10 в 07:31

0

def new_line(): print

czech 27.06.10 в 07:31

0

def three_lines():
    new_line()
    new_line()
    new_line()

czech 27.06.10 в 07:32

0

print "First Line."
three_lines()
print "Second Line."

czech 27.06.10 в 07:32

0

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

czech 27.06.10 в 07:38

0

Как вы могли заметить, создать функцию нужно до ее вызова. Другими словами, объявление функции должно стоять до ее вызова.

czech 27.06.10 в 07:42

0

3.2 Поток вычислений

czech 27.06.10 в 07:42

0

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

czech 27.06.10 в 07:43

0

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

czech 27.06.10 в 07:45

0

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

czech 27.06.10 в 07:47

0

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

czech 27.06.10 в 07:51

0

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

czech 27.06.10 в 07:54

0

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

czech 27.06.10 в 07:58

0

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

czech 27.06.10 в 07:59

0

3.3 Параметры, аргументы, операция import

czech 27.06.10 в 08:00

0

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

czech 27.06.10 в 08:04

0

>>> abs(5)
5
>>> abs(-5)
5

czech 27.06.10 в 08:05

0

В этом примере, аргументами для функции abs были 5 и -5.

czech 27.06.10 в 08:05

0

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

czech 27.06.10 в 08:07

0

>>> pow(2, 3)
8
>>> pow(7, 4)
2401

czech 27.06.10 в 08:08

0

Другая встроенная функция, которая принимает более одного аргумента, это max.

czech 27.06.10 в 08:08

0

>>> max(7, 11)
11
>>> max(4, 1, 17, 2, 12)
17
>>> max(3 * 11, 5**3, 512 - 9, 1024**0)
503

czech 27.06.10 в 08:08

0

Функции max может быть передано любое количество аргументов, разделенных запятыми; функция возвращает максимальный из них. Аргументы могут быть простыми значениями или выражениями. В предыдущем примере, результат был - 503, больший из списка 33, 125 и 1.

czech 27.06.10 в 08:11

0

Приведем пример пользовательской функции, которой передается параметр:

czech 27.06.10 в 08:11

0
Минутку...

Следующая страница →