Функции в Python

FavoriteLoadingДобавить в избранное

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

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

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

def say_hello():
    print("Hello")

Здесь функция say_hello не принимает никаких параметров и просто выводит на консоль строку "Hello". Важно помнить, что все инструкции внутри функции должны иметь отступ. Если инструкция не имеет отступа, она не будет частью функции.
Например:

def say_hello():
    print("Hello")
print("Bye")

В данном случае строка print("Bye") не входит в функцию say_hello, поскольку не имеет нужного отступа.

Вызов функции

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

say_hello()

Пример вызова функции:

def say_hello():
    print("Hello")

say_hello()
say_hello()
say_hello()

Результатом выполнения этого кода будет трижды выведенная строка "Hello".
Функции с одной инструкцией можно записывать на одной строке:

def say_hello(): print("Hello")
say_hello()

Локальные функции

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

def print_messages():
    # определение локальных функций
    def say_hello(): 
        print("Hello")
    def say_goodbye(): 
        print("Good Bye")
    
    # вызов локальных функций
    say_hello()
    say_goodbye()

# Вызов функции print_messages
print_messages()

Здесь функции say_hello и say_goodbye определены внутри функции print_messages, и их можно вызывать только внутри этой функции. Вне функции print_messages эти функции недоступны.

Функция main

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

def main():
    say_hello()
    say_goodbye()

def say_hello():
    print("Hello")

def say_goodbye():
    print("Good Bye")

# Вызов функции main
main()

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

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

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

def say_hello(name):
    print(f"Hello, {name}")

say_hello("Tom")
say_hello("Bob")
say_hello("Alice")

В данном случае функция say_hello имеет параметр name, который принимает строку с именем. При вызове функции, переданное значение подставляется в строку, выводимую на консоль. Консольный вывод будет следующим:

Hello, Tom
Hello, Bob
Hello, Alice

Множественные параметры

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

def print_person(name, age):
    print(f"Name: {name}")
    print(f"Age: {age}")

print_person("Tom", 37)

Консольный вывод:

Name: Tom
Age: 37

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

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

def say_hello(name="Tom"):
    print(f"Hello, {name}")

say_hello()  # Hello, Tom
say_hello("Bob")  # Hello, Bob

Здесь параметр name необязателен, и если значение не передано, используется значение по умолчанию "Tom".

Именованные параметры

При вызове функции можно явно указывать, каким параметрам какие значения передавать:

def print_person(name, age):
    print(f"Name: {name}  Age: {age}")

print_person(age=22, name="Tom")

Здесь параметры age и name получают значения по имени, а не по позиции.

Позиционные и именованные параметры

В Python можно также определить параметры, которые должны получать значения только по позиции или только по имени:

def print_person(name, /, age, company="Microsoft"):
    print(f"Name: {name}  Age: {age}  Company: {company}")

print_person("Tom", company="JetBrains", age=24)  # Name: Tom  Age: 24  Company: JetBrains

Параметр name является позиционным и должен получать значение только по позиции. Параметры age и company могут получать значения по имени.

Неопределённое количество параметров

Иногда необходимо передать функции неопределённое количество значений. Это можно сделать с помощью *args, где args - это любое имя переменной:

def sum(*numbers):
    result = 0
    for n in numbers:
        result += n
    print(f"Sum = {result}")

sum(1, 2, 3, 4, 5)  # Sum = 15
sum(3, 4, 5, 6)     # Sum = 18

Здесь *numbers позволяет передавать функции любое количество чисел, а внутри функции они обрабатываются как кортеж.

Возвращение результата из функции и оператор return

Функция в Python может не только выполнять определённые действия, но и возвращать результат. Для этого используется оператор return, за которым следует значение или выражение, которое нужно вернуть. Возвращаемое значение может быть присвоено переменной или использовано напрямую. Рассмотрим это на примерах.

Определение функции с возвращаемым результатом

Рассмотрим простейший пример функции, которая возвращает строку:

def get_message():
    return "Hello bbcat.ru"

В функции get_message() после оператора return указана строка "Hello bbcat.ru". Когда эта функция вызывается, она возвращает указанную строку.
Мы можем сохранить результат вызова функции в переменной или вывести его напрямую:

def get_message():
    return "Hello bbcat.ru"

message = get_message()  # получаем результат функции get_message в переменную message
print(message)  # выводим содержимое переменной message на консоль: Hello bbcat.ru

# можно напрямую передать результат функции get_message в функцию print
print(get_message())  # Hello bbcat.ru

Возвращение вычисляемого результата

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

def double(number):
    return 2 * number

В этой функции результат выражения 2 * number возвращается вызвавшей стороне:

result1 = double(4)  # result1 = 8
result2 = double(5)  # result2 = 10

print(f"result1 = {result1}")  # result1 = 8
print(f"result2 = {result2}")  # result2 = 10

Аналогично, можно определить функцию для сложения двух чисел:

def sum(a, b):
    return a + b

Результат функции можно использовать как угодно:

result = sum(4, 6)  # result = 10
print(f"sum(4, 6) = {result}")  # sum(4, 6) = 10
print(f"sum(3, 5) = {sum(3, 5)}")  # sum(3, 5) = 8

Оператор return и выход из функции

Важно понимать, что оператор return не только возвращает значение, но и немедленно завершает выполнение функции. Все инструкции после return в теле функции не будут выполнены. Рассмотрим пример:

def get_message():
    return "Hello bbcat.ru"
    print("End of the function")  # эта строка никогда не будет выполнена

Здесь строка print("End of the function") никогда не будет выполнена, так как до неё программа выйдет из функции по оператору return.

Прерывание выполнения функции с помощью return

Иногда return используется для завершения функции раньше времени, если выполнено какое-то условие. Например:

def print_person(name, age):
    if age > 120 or age < 1:
        print("Invalid age")
        return
    print(f"Name: {name}  Age: {age}")

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

print_person("Tom", 22)  # Name: Tom  Age: 22
print_person("Bob", -102) # Invalid age

Функция как тип

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

Функция как переменная

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

def say_hello():
    print("Hello")

def say_goodbye():
    print("Good Bye")

message = say_hello
message()  # Hello

message = say_goodbye
message()  # Good Bye

В этом примере переменная message сначала указывает на функцию say_hello, а затем - на функцию say_goodbye. При вызове message() фактически вызывается та функция, на которую указывает переменная.

Функция как параметр другой функции

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

def do_operation(a, b, operation):
    result = operation(a, b)
    print(f"result = {result}")

def sum(a, b):
    return a + b

def multiply(a, b):
    return a * b

do_operation(5, 4, sum)  # result = 9
do_operation(5, 4, multiply)  # result = 20

В данном примере функция do_operation принимает три параметра, где третий параметр - это функция, которая выполняет операцию над первыми двумя параметрами. Вызов функции do_operation с различными операциями (sum и multiply) приводит к выполнению соответствующих действий и выводу их результатов на консоль.

Функция как результат другой функции

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

def sum(a, b):
    return a + b

def subtract(a, b):
    return a - b

def multiply(a, b):
    return a * b

def select_operation(choice):
    if choice == 1:
        return sum
    elif choice == 2:
        return subtract
    else:
        return multiply

operation = select_operation(1)  # operation = sum
print(operation(10, 6))  # 16

operation = select_operation(2)  # operation = subtract
print(operation(10, 6))  # 4

operation = select_operation(3)  # operation = multiply
print(operation(10, 6))  # 60

Здесь функция select_operation возвращает одну из трёх функций (sum, subtract, multiply) в зависимости от значения параметра choice. Это делает возможным гибкое управление логикой программы, основываясь на пользовательском выборе или других факторах.

Заключение

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

Написать Администратору

Вы можете написать Администратору сайта.

отправить