Определение функций в Python 3

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

Python предлагает множество встроенных функций. Вы наверняка знакомы с такими:

  • print() выводит объект в терминал.
  • int() преобразовывает строки или числа в целые числа.
  • len() возвращает длину объекта.

Имя функции содержит круглые скобки и может содержать параметры.

Данное руководство научит вас определять пользовательские функции.

Определение функции

Читайте также: Написание простой программы в Python 3

Для начала попробуйте преобразовать простую программу «Hello, World!» в функцию.

Создайте новый текстовый файл hello.py, а затем определите функцию.

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

Чтобы определить функцию hello(), добавьте в файл hello.py:

def hello():

Это исходное определение функции.

Далее нужно добавить вторую строку с 4 пробелами в начале. Она будет определять задачу, которую выполняет функция (в данном случае функция будет выводить в консоль фразу Hello, World!):

def hello():
print("Hello, World!")

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

После определения функции вызовите её:

def hello():
print("Hello, World!")
hello()

Теперь запустите программу:

python hello.py

Она должна вернуть:

Hello, World!

Функция hello() – довольно простой пример. Функции могут быть гораздо сложнее: содержать циклы for, условные выражения и другие компоненты.

Читайте также:

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

# Определение функции names()
def names():
# Переменная name с вводными данными
name = str(input('Enter your name: '))
# Поиск гласных в строке name
if set('aeiou').intersection(name.lower()):
print('Your name contains a vowel.')
else:
print('Your name does not contain a vowel.')
# Итерация строки name
for letter in name:
print(letter)
# Вызов функции
names()

На примере функции names(), которая использует условное выражение и цикл for, можно увидеть, как в определении функции должен быть организован код. Хотя, конечно, код функции во многом зависит от её цели. В некоторых случаях условное выражение и цикл for нужно разделить на два разных блока.

Параметры функции

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

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

Попробуйте написать простую программу с параметрами x, y и z. Создайте функцию, которая складывает эти параметры и выводит результат. Вызовите функцию и передайте ей числа. Создайте файл add_numbers.py и добавьте в него код:

def add_numbers(x, y, z):
a = x + y
b = x + z
c = y + z
print(a, b, c)
add_numbers(1, 2, 3)

Параметр x имеет значение 1, y – 2, а z – 3.

Значения присваиваются каждому параметру по порядку.

Программа выполняет следующие вычисления:

a = 1 + 2
b = 1 + 3
c = 2 + 3

Также программа выводит значения a, b и c. Давайте запустим программу и посмотрим на результат:

python add_numbers.py
3 4 5

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

Именованные аргументы

Параметры можно вызывать не только ко порядку. Именованные аргументы позволяют вызывать параметры по имени.

При этом параметры можно вызывать в том порядке, в котором они определены. Интерпретатор Python будет использовать имя параметра для поиска требуемого значения.

Создайте функцию, которая будет выводить информацию о профиле пользователя. Откройте файл profile.py и передайте ей параметры username (строка) и followers (целое число).

# Определение функции с параметрами
def profile_info(username, followers):
print("Username: " + username)
print("Followers: " + str(followers))
username
followers
profile_info()

В определении функции profile_info() параметры username и followers взяты в круглые скобки. Блок функции выводит строку с информацией о пользователе на основе двух параметров.

Вызовите функцию и присвойте ей параметры:

def profile_info(username, followers):
print("Username: " + username)
print("Followers: " + str(followers))
# Вызов функции с присвоенными параметрами
profile_info("8hostblog", 945)
# Вызов функции с именованным аргументом
profile_info(username="AlexFisher", followers=342)

В первом вызове используется имя 8hostblog с количеством подписчиков 945. Во втором вызове используется именованные аргументы.

Запустите программу:

python profile.py
Username: 8hostblog
Followers: 945
Username: AlexFisher
Followers: 342

В выводе вы видите имя и количество подписчиков каждого пользователя.

Вы можете изменить порядок отображения параметров в этой программе:

def profile_info(username, followers):
print("Username: " + username)
print("Followers: " + str(followers))
# Изменение порядка параметров
profile_info(followers=820, username="Cameron-Tailor")

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

Username: Cameron-Tailor
Followers: 820

Благодаря именованным аргументам вы можете вызывать параметры функции в любом порядке.

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

Также можно устанавливать значения параметров по умолчанию. Попробуйте присвоить параметру followers значение по умолчанию 1.

def profile_info(username, followers=1):
print("Username: " + username)
print("Followers: " + str(followers))

Теперь можно запустить функцию с параметром username, а followers будет по умолчанию иметь значение 1. При желании значение followers можно изменить.

def profile_info(username, followers=1):
print("Username: " + username)
print("Followers: " + str(followers))
profile_info(username="Steve")
profile_info(username="8hostblog", followers=945)

Запустите программу. На экране появится:

Username: Steve
Followers: 1
Username: 8hostblog
Followers: 945

Возвращение значения

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

Для этого используется оператор return, который останавливает выполнение функции и возвращает значение. Без аргументов оператор return вернёт значение None.

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

В текстовом файле square.py создайте программу, которая возводит в квадрат значение х и возвращает значение переменной y. Вызовите переменную result, значение которой получается путём выполнения функции square() с аргументом 3.

def square(x):
y = x ** 2
return y
result = square(3)
print(result)

Запустите программу:

python square.py
9

Теперь для примера попробуйте закомментировать выражение return:

def square(x):
y = x ** 2
# return y
result = square(3)
print(result)

Запустите программу:

python square.py
None

Без выражения return программа не может вернуть значение, потому возвращает значение по умолчанию, None.

Вернёмся к предыдущему примеру, программе add_numbers.py. Замените print() оператором return.

def add_numbers(x, y, z):
a = x + y
b = x + z
c = y + z
return a, b, c
sums = add_numbers(1, 2, 3)
print(sums)

Вне тела функции определена переменная sums, значение которой равно результату функции с параметрами 1, 2 и 3.

Запустите программу:

python add_numbers.py
(3, 4, 5)

Программа возвращает такой же результат, как и с print(). В данном случае в качестве результата возвращается кортеж.

Читайте также: Кортежи в Python 3

Достигая оператора return, функция прекращает выполнение.

# Файл return_loop.py
def loop_five():
for x in range(0, 25):
print(x)
if x == 5:
# Stop function at x == 5
return
print("This line will not execute.")
loop_five()

Оператор return в цикле for прекращает выполнение функции, потому строки после функции не будут запущены. Если бы вместо него использовался оператор break, программа прекратила бы выполнение цикла, а не функции, и последнее выражение print() было бы обработано.

Функция main()

В языке Python функцию можно вызвать в конце программы, и она запустится (как показано в предыдущих примерах), однако некоторым языкам программирования (например, C++ или Java) требуется функция main. Функция main() в Python необязательна, но она позволяет логически структурировать программу Python и объединить наиболее важные её компоненты в одну функцию. Также с её помощью программы Python легче читать программистам, которые работают с другими языками.

Вернитесь в файл hello.py и добавьте функцию main(), сохранив при этом функцию hello().

def hello():
print("Hello, World!")
def main():

В функцию main() добавьте выражение print(). Затем вызовите функцию hello() внутри функции main().

def hello():
print("Hello, World!")
def main():
print("This is the main function")
hello()

В конце файла вызовите функцию main().

def hello():
print("Hello, World!")
def main():
print("This is the main function.")
hello()
main()

Теперь можно запустить программу:

python hello.py
This is the main function.
Hello, World!

Теперь попробуйте использовать несколько функций.

Читайте также: Использование переменных в Python 3

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

В Python область выполнения высокоуровневого кода называется __main__. Когда программа запускается из стандартного ввода, скрипта или интерактивного запроса, __name__ равно __main__.

Потому в программах используется такая конструкция:

if __name__ == '__main__':
# Код основной программы

Эта конструкция работает как разделитель, благодаря чему файл можно использовать как:

  • Основную программу (и запустить код после конструкции if).
  • Модуль (и не выполнять код после if).

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

Попробуйте расширить программу names.py. Создайте новый файл more_names.py; в этом файле объявите глобальную переменную и измените исходную функцию names(), разделив задачи на две дискретные функции.

Первая функция, has_vowel(), будет проверять строку name на наличие гласных. Вторая функция, print_letters(), будет выводить каждую букву строки name.

# Объявление глобальной переменной (для работы со всеми функциями)
name = str(input('Enter your name: '))
# Определение функции, которая будет искать гласные в name
def has_vowel():
if set('aeiou').intersection(name.lower()):
print('Your name contains a vowel.')
else:
print('Your name does not contain a vowel.')
# Итерация букв строки name
def print_letters():
for letter in name:
print(letter)

Теперь определите функцию main(), которая будет вызывать has_vowel() и print_letters().

# Объявление глобальной переменной (для работы со всеми функциями)
name = str(input('Enter your name: '))
# Определение функции, которая будет искать гласные в name
def has_vowel():
if set('aeiou').intersection(name.lower()):
print('Your name contains a vowel.')
else:
print('Your name does not contain a vowel.')
# Итерация букв строки name
def print_letters():
for letter in name:
print(letter)
# Определение главного метода, который вызывает другие функции
def main():
has_vowel()
print_letters()

Затем добавьте конструкцию if __name__ == ‘__main__’: в конец файла.

В данном случае все функции помещены в функцию main(). Потому после конструкции нужно вызвать функцию main().

# Объявление глобальной переменной (для работы со всеми функциями)
name = str(input('Enter your name: '))
# Определение функции, которая будет искать гласные в name
def has_vowel():
if set('aeiou').intersection(name.lower()):
print('Your name contains a vowel.')
else:
print('Your name does not contain a vowel.')
# Итерация букв строки name
def print_letters():
for letter in name:
print(letter)
# Определение главного метода, который вызывает другие функции
def main():
has_vowel()
print_letters()
# Вызов функции main()
if __name__ == '__main__':
main()

Теперь можно запустить программу:

python more_names.py

Программа вернёт такой же вывод, как и names.py, но теперь код программы лучше организован, и его можно использовать как модуль без изменений.

Если вы не хотите определять функцию main(), вы можете закончить программу так:

...
if __name__ == '__main__':
has_vowel()
print_letters()

Функция main() и конструкция if __name__ == ‘__main__’: позволяют логически организовать код, делают его модульным и удобочитаемым.

Заключение

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

Читайте также: Создание модулей Python 3

Tags: ,

Добавить комментарий