Перейти к основному содержимому

Аргументы

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

Аргументы пишутся внутри круглых скобок после имени функции. Жёсткого ограничения на их количество нет; просто ставьте между ними запятую.

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

Пример

Один аргумент, три вызова:

Prompt
Напишите функцию, которая принимает параметр fname и выводит имя, а после него "Refsnes". Вызовите её с "Emil", "Tobias" и "Linus".
Вывод: полная программа на Python

Параметры и аргументы

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

С точки зрения функции:

Параметр — это переменная, указанная в круглых скобках в определении функции.

Аргумент — это реальное значение, которое функция получает, когда её вызывают.

main.py
def my_function(name): # name is a parameter
  print("Hello", name)

my_function("Emil") # "Emil" is an argument

Количество аргументов

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

Функция, которой нужно 2 аргумента, должна получить ровно 2.

Передайте больше или меньше, и Python сообщит об ошибке.

Пример

Этой функции нужно 2 аргумента, и она получает 2:

Prompt
Напишите функцию, которая принимает fname и lname и выводит их вместе. Вызовите её с "Emil" и "Refsnes".
Вывод: полная программа на Python

Пример

Этой функции нужно 2 аргумента, но она получает только 1:

Prompt
Покажите, что происходит, если функцию, ожидающую 2 аргумента, вызвать только с 1. Определите функцию с fname и lname, затем вызовите её только с "Emil".
Вывод: полная программа на Python

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

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

Пример

Prompt
Напишите функцию с параметром по умолчанию name = "друг", которая выводит приветствие. Вызовите её с "Emil", "Tobias", без аргумента и с "Linus".
Вывод: полная программа на Python

Пример

Параметр country со значением по умолчанию:

Prompt
Напишите функцию с параметром по умолчанию country = "Norway", которая выводит «Я из», а затем страну. Вызовите её с "Sweden", "India", без аргумента и с "Brazil".
Вывод: полная программа на Python

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

Аргументы можно передавать и в форме ключ = значение.

Поскольку каждое значение помечено именем, порядок их записи больше не имеет значения.

В документации Python Keyword Arguments (именованные аргументы) часто сокращают до kwargs.

Пример

Prompt
Напишите функцию с параметрами animal и name, которая выводит информацию о питомце. Вызовите её с именованными аргументами animal = "собака" и name = "Buddy".
Вывод: полная программа на Python

Пример

Prompt
Напишите функцию с параметрами animal и name. Вызовите её с именованными аргументами в обратном порядке: name = "Buddy", animal = "собака".
Вывод: полная программа на Python

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

Аргументы, переданные без указания имён, называются позиционными.

Python сопоставляет их с параметрами по позиции, поэтому они должны идти в правильном порядке.

Если поменять их местами, результат будет другим.

Пример

Prompt
Напишите функцию с параметрами animal и name. Вызовите её с позиционными аргументами "собака" и "Buddy".
Вывод: полная программа на Python

Пример

Если изменить порядок, результат будет другим:

Prompt
Покажите, что происходит, если передать позиционные аргументы в неправильном порядке. Вызовите функцию, ожидающую (animal, name), с ("Buddy", "собака").
Вывод: полная программа на Python

Сочетание позиционных и именованных аргументов

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

Единственное правило: позиционные идут первыми:

Пример

Prompt
Напишите функцию с параметрами animal, name и age. Вызовите её, смешивая позиционные и именованные аргументы.
Вывод: полная программа на Python

Передача разных типов данных

Аргументы могут быть любого типа данных: строка, число, список, словарь и так далее.

Внутри функции значение сохраняет тот же тип, который у него был при передаче:

Пример

Передача списка в функцию:

Prompt
Напишите функцию, которая принимает список фруктов и выводит каждый из них. Передайте ей список ["apple", "banana", "cherry"].
Вывод: полная программа на Python

Пример

Передача словаря в функцию:

Prompt
Напишите функцию, которая принимает словарь с данными о человеке и выводит имя и возраст. Передайте ей {"name": "Emil", "age": 25}.
Вывод: полная программа на Python

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

Оператор return позволяет функции вернуть значение:

Пример

Prompt
Напишите функцию, которая принимает x и y и возвращает их сумму. Вызовите её с 5 и 3 и выведите результат.
Вывод: полная программа на Python

Возврат разных типов данных

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

Пример

Возврат списка:

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

Пример

Возврат кортежа:

Prompt
Напишите функцию, которая возвращает кортеж (10, 20). Распакуйте его в x и y и выведите их.
Вывод: полная программа на Python

Только позиционные аргументы

Функция может требовать, чтобы ей передавали ТОЛЬКО позиционные аргументы.

Для этого добавьте , / после аргументов, как показано в первом примере.

Без , / при вызове можно использовать именованные аргументы, даже если функция написана с расчётом на позиционные, как во втором примере.

Если , / есть, передача именованного аргумента вызывает ошибку, что и показывает третий пример.

Пример

Prompt
Напишите функцию с параметром, принимающим только позиционный аргумент, используя /. Вызовите её с позиционным аргументом.
Вывод: полная программа на Python

Пример

Prompt
Покажите, что без / функция допускает именованные аргументы. Определите функцию с параметром name и вызовите её с name = "Emil".
Вывод: полная программа на Python

Пример

Prompt
Покажите ошибку, возникающую при передаче именованных аргументов в параметры, которые принимают только позиционные аргументы. Определите функцию с name, / и вызовите её с name = "Emil".
Вывод: полная программа на Python

Только именованные аргументы

Чтобы принимать только именованные аргументы, поставьте *, перед аргументами, как в первом примере.

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

Если *, на месте, позиционный аргумент вызывает ошибку, как показывает третий пример.

Пример

Prompt
Напишите функцию с параметром, принимающим только именованный аргумент, используя *,. Вызовите её с name = "Emil".
Вывод: полная программа на Python

Пример

Prompt
Покажите, что без *, функция допускает позиционные аргументы. Определите функцию с параметром name и вызовите её с "Emil".
Вывод: полная программа на Python

Пример

Prompt
Покажите ошибку, возникающую при передаче позиционных аргументов в параметры, которые принимают только именованные аргументы. Определите функцию с *, name и вызовите её с "Emil".
Вывод: полная программа на Python

Сочетание только позиционных и только именованных аргументов

В одной функции можно использовать оба вида вместе.

Всё, что стоит перед /, должно быть позиционным, а всё, что стоит после *, должно передаваться как именованный аргумент:

Пример

Prompt
Объедините в одной функции аргументы только позиционные и только именованные. Используйте / и *, чтобы задать типы аргументов, и верните сумму.
Вывод: полная программа на Python