Функции в Python: объявление, аргументы, возврат значений и глобальные переменные

онлайн тренажер по питону
Онлайн-тренажер Python 3 для начинающих

Теория без воды. Задачи с автоматической проверкой. Подсказки на русском языке. Работает в любом современном браузере.

начать бесплатно

🔥 Введение

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

Но многие новички (и даже опытные разработчики) сталкиваются с вопросами:

  • Как правильно передавать аргументы в функцию?

  • Что такое глобальные переменные и как с ними работать?

  • Зачем нужны декораторы и как использовать global?

  • Как вернуть несколько значений из функции?

Эта статья даст вам полный ответ на эти вопросы, с практическими примерами и пояснениями.


📚 Что такое функция в Python?

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

Объявление функции:

python
def greet(): print("Привет, мир!")

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

python
greet()

🧩 Аргументы функций

Функции могут принимать параметры для обработки данных.

Позиционные аргументы:

python
def greet(name): print(f"Привет, {name}!") greet("Анна")

Аргументы по умолчанию:

python
def greet(name="Гость"): print(f"Привет, {name}!") greet() # Привет, Гость!

Ключевые аргументы:

python
def order(item, quantity): print(f"Вы заказали {quantity} {item}") order(item="пицца", quantity=2)

Неопределённое количество аргументов (*args, **kwargs):

python
def summation(*args): print(sum(args)) summation(1, 2, 3, 4) # 10 def print_info(**kwargs): for key, value in kwargs.items(): print(f"{key}: {value}") print_info(name="Иван", age=30)

🔄 Возврат значений из функций

Функции могут возвращать результаты через оператор return.

python
def add(a, b): return a + b result = add(5, 3) print(result) # 8

Возврат нескольких значений:

python
def get_coordinates(): return 10, 20 x, y = get_coordinates()

🌍 Работа с глобальными переменными

Иногда необходимо изменить переменную, определённую вне функции.

Ошибка без global:

python
counter = 0 def increment(): counter += 1 # UnboundLocalError increment()

Правильный способ — использование global:

python
counter = 0 def increment(): global counter counter += 1 increment() print(counter) # 1

📌 Важно! Чрезмерное использование глобальных переменных делает код сложным и менее читаемым.


📦 Альтернатива глобальным переменным — Возврат значений

python
def increment(counter): return counter + 1 counter = 0 counter = increment(counter)

🧠 Использование nonlocal для вложенных функций

python
def outer(): count = 0 def inner(): nonlocal count count += 1 return count return inner counter_fn = outer() print(counter_fn()) # 1 print(counter_fn()) # 2

🧰 Декораторы функций в Python

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

python
def decorator(func): def wrapper(*args, **kwargs): print("Перед вызовом функции") result = func(*args, **kwargs) print("После вызова функции") return result return wrapper @decorator def say_hello(): print("Привет!") say_hello()

📖 Встроенные декораторы

Декоратор Назначение
@staticmethod Статический метод класса
@classmethod Метод с доступом к классу
@property Геттер как атрибут
@functools.lru_cache Кэширование результатов

📈 Полезные советы

  • Используйте аргументы по умолчанию, чтобы избежать ошибок с неопределёнными значениями.

  • Не злоупотребляйте глобальными переменными — лучше возвращать значения.

  • Используйте декораторы для логирования, проверки прав доступа и кэширования.

  • Применяйте *args и **kwargs для гибких функций.


✅ Заключение

Функции в Python — это не просто инструмент структурирования кода. Это фундаментальный элемент любого проекта: от простых скриптов до сложных веб-приложений.

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


❓FAQ

Как объявить глобальную переменную в функции Python?
Используйте ключевое слово global внутри функции.

Можно ли изменить глобальную переменную без global?
Нет, без global переменная будет считаться локальной.

Зачем нужны декораторы?
Они позволяют модифицировать поведение функций без изменения их кода.

Как вернуть несколько значений из функции?
Через кортеж: return x, y.

Что выбрать — глобальные переменные или возврат значений?
Возврат значений предпочтительнее для чистоты кода.

Новости