Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 1606.pdf
Скачиваний:
18
Добавлен:
30.04.2022
Размер:
1.48 Mб
Скачать

3. Сложите два числа с плавающей запятой и преобразуйте результат в целочисленный.

Вопросы для самопроверки

1.Какие вы знаете типы данных Python?

2.Что такое кортежи в Python?

3.Что такое методы, изменяющие множества?

4.Как работают Списки в Python?

5.Как работают Словари в Python?

3. ФУНКЦИИ

Когда мы говорим о функции, то имеем в виду фрагмент программного кода, который имеет название, и который по этому названию мы можем вызвать любом (или практически любом) месте программы. Функции - очень полезный и эффективный инструмент программирования, поскольку позволяет значительно сократить объем программного кода, сделать его понят нее и эффективнее. Короче говоря, без функций писать эффективные про граммы практически нереально. Поэтому с функциями нужно быть на "ты", особенно если речь идет о программировании в Python.

3.1. Создание функции

Перед тем, как функцию использовать, ее необходимо описать. Что подразумевает описание функции? Как минимум, это тот программный код , который следует выполнять при вызове функции , и, разумеется , название функции. Также функции при выполнении могут понадобиться некоторые пара метры, которые передаются функции при вызове и без которых выполнение функции невозможно. Эти параметры мы будем называть аргументами функции.

И так, для описания функции в Python необходимо:

указать (задать) имя функции;

описать аргументы функции;

описать программный код функции.

Описание функции начинается с ключевого слова def. После него указывают название функции (это должен быть уникальный идентификатор, желательно со смысловой нагрузкой, состоящий из латинских букв, можно также цифр и символа подчеркивания – но с цифры имя функции начинаться не

18

может). Затем перечисляются аргументы функции. Для аргументов про сто указываются названия. Тип аргументов не указывается. Аргументы перечисляются после имени функции в круглых скобках. Если аргументов не сколько, они разделяются запятыми. Даже если аргументов у функции нет (такое тоже бывает), круглые скобки все равно указываются. Заканчивается вся эта конструкция двоеточием, и далее с новой строки следует блок команд, которые собственно и определяют программный код функции. Весь шаблон объявления функции выглядит следующим образом (жирным шрифтом выделены ключевые элементы):

def имя_ функции (аргументы): · команды

То есть все достаточно просто и прозрачно.

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

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

#Функция без аргументов de f your_name ( ) :

#Отображается сообщение рrint ("Добрый день!")

#Запоминается введенный пользователем текст

name=input ("Kaк Вас зовут? ")

#Результат функции return name

#Функция с одним аргументом def say_hel lo (txt):

#Отображается сообщение

print ("Здравствуйте, " , tхt+ " ! ")

# Вызываем функцию и результат записываем в переменную my_name=your_name ( )

19

# Вызываем функцию с аргументом say_hello (my_name)

В результате выполнения этого программного кода получаем следующий результат (жирным шрифтом выделено введенное пользователем значение):

Результат:

Добрый день!

Как Вас зовут? Алексей Васильев

Здравствуйте, Алексей Васильев!

Код достаточно простой, но мы его все же прокомментируем. В программе объявляется две функции. Функция уоur_nаmе( ) не имеет аргументов. При выполнении этой функции сначала командой print ("Добрый день!") отображается приветствие. Затем пользователю предлагается вести свое имя. Введенное пользователем текстовое значение запоминается в переменной name. Вся команда выглядит как name=input ("Как Вас зовут?") .

После этого с помощью инструкции return name значение переменной name возвращается в качестве результата функции your_narne( ). Таким образом, у этой функции нет аргументов, но зато она возвращает результат. И ее результат – это то, что вводит пользователь (предполагается, что имя пользователя).

Еще одна функция say_hello( ) нужна для отображения приветствия.

У функции один аргумент (обозначен как txt). Текст сообщения, которое отображается при вызове функции, формируется с учетом значения аргумента txt, переданного функции. Результат функция не возвращает. В теле функции всего одна команда print (" Здравствуйте, " , txt + " ! "), которой в консольное окно выводится сообщение.

Описанные функции используем следующим образом. Сначала командой my_narne=your_name ( ) вызываем функцию your _ name ( ) и результат вызова записываем в переменную my_narne. Затем командой say_hello(my_name) вызываем функцию say_hello( ), передав ей аргументом переменную my_ name. Результат этих действий таков, как показано выше.

3.2. Значения аргументов по умолчанию

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

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

20

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

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

#1 -я функция с одним аргументом.

#У аргумента есть значение по умолчанию

def print_text ( txt=" Знaчeниe аргумента по умолчанию . "): print ( txt )

#2 -я функция с двумя аргументами.

#У второго аргумента есть значение по умолчанию

def show_args (a, b="Bтopoй аргумент не указан. " ) :

print (a, b)

#3 - я функция с двумя аргументами.

#У аргументов есть значения по умолчанию

def my_func (x=" l -й аргумент х. " , у= " 2 -й аргумент у . " , ) :

print (x, y)

#Проверяем работу 1 -й функции .

#Функции передан один аргумент print_text ( "Apгyмeнт указан явно ." )

#Функции аргументы не передаются print_text ( )

#Проверяем работу 2-й функции .

#Функции переданы два аргумента

show_args ("Пepвый аргумент ." , "Второй аргумент ." )

#Функции передан один аргумент show_args ( "Пepвый аргумент . " )

#Проверяем работу 3 -й функции .

#Функции аргументы не передаются my_func ( )

#Функции передан один аргумент my_func ( "Oдин из аргументов ." )

#Функции передан один аргумент .

#Переданный аргумент идентифицирован явно my_func (y="Oдин из аргументов .")

В результате выполнения программного кода получаем следующий результат:

21

Аргумент указан явно.

Значение аргумента по умолчанию. Первый аргумент. Второй аргумент.

Первый аргумент. Второй аргумент не указан. 1 -й аргумент х. 2 -й аргумент у.

Один из аргументов. 2 -й аргумент у. 1 -й аргумент х. Один из аргументов.

Мы объявляем три функции. Все три функции действуют по одной схеме: значения аргументов выводятся на экран. Мы подразумеваем, что все три функции оперируют с текстовыми аргументами. Некоторые из этих аргументов имеют значения по умолчанию. Так, у функции print_text() один аргумент, и у этого аргумента есть значение по умолчанию. Мы вызываем эту функцию без аргумента (в этом случае используется значение аргумента по умолчанию), а также вызываем эту функцию с одним аргументом (в этом случае используется переданное аргументом значение).

Уфункции show_args() два аргумента, и у второго аргумента есть значение по умолчанию. Поэтому если вызвать функцию с одним аргументом, то для второго аргумента используется значение по умолчанию. Если передаются два аргумента, то для обоих аргументов используются те значения, что переданы.

Уфункции my_func(), как и в предыдущем случае, два аргумента, но теперь у обоих аргументов есть значения по умолчанию. Если мы вызовем эту функцию с двумя аргументами, то интриги не будет – те значения, что переданы аргументами, будут использованы при выполнении кода функции. Если функции при вызове передан один аргумент, то возникает вопрос: какой это аргумент – первый или второй? Ведь значение по умолчанию есть и у первого, и у второго аргумента. Поэтому теоретически переданное функции значение может быть, как первым, так и вторым аргументом.

По умолчанию считается, что функции передается первый аргумент, а для второго используется значение по умолчанию. Но у нас есть еще одна возможность: мы можем явно указать, для какого аргумента явно указано значение. В этом случае при вызове функции указывается не только значение аргумента, но и его имя (то, которое указывалось при описании функции). Используется формат имя_ аргумента=значение.

Примером может быть команда my_func(у="Один из аргументов."). В этом случае для первого аргумента используется значение по умолчанию, а переданное функции значение – это значение второго аргумента.

Таким образом, передача аргументов при вызове функции возможна:

– без указания имени аргументов, при этом значения аргументов передаются строго в той последовательности, как эти аргументы были описаны

вфункции (такой способ передачи аргументов называют позиционным);

22