Аргументы
Функции могут получать информацию извне через аргументы.
Аргументы пишутся внутри круглых скобок после имени функции. Жёсткого ограничения на их количество нет; просто ставьте между ними запятую.
У функции в следующем примере один аргумент, fname. При каждом вызове ей передаётся имя, и функция использует его, чтобы вывести полное имя.
Пример
Один аргумент, три вызова:
fname и выводит имя, а после него "Refsnes".
Вызовите её с "Emil", "Tobias" и "Linus".
Вывод: полная программа на Python
def my_function(fname):
print(fname + " Refsnes")
my_function("Emil")
my_function("Tobias")
my_function("Linus")
Параметры и аргументы
Слова параметр и аргумент часто используют как взаимозаменяемые, ведь оба означают информацию, передаваемую в функцию.
С точки зрения функции:
Параметр — это переменная, указанная в круглых скобках в определении функции.
Аргумент — это реальное значение, которое функция получает, когда её вызывают.
def my_function(name): # name is a parameter
print("Hello", name)
my_function("Emil") # "Emil" is an argument
Количество аргументов
Обычно количество аргументов в вызове должно совпадать с тем, что ожидает функция.
Функция, которой нужно 2 аргумента, должна получить ровно 2.
Передайте больше или меньше, и Python сообщит об ошибке.
Пример
Этой функции нужно 2 аргумента, и она получает 2:
fname и lname и выводит их вместе.
Вызовите её с "Emil" и "Refsnes".
Вывод: полная программа на Python
def my_function(fname, lname):
print(fname + " " + lname)
my_function("Emil", "Refsnes")
Пример
Этой функции нужно 2 аргумента, но она получает только 1:
fname и lname, затем вызовите её только с "Emil".
Вывод: полная программа на Python
def my_function(fname, lname):
print(fname + " " + lname)
my_function("Emil")
Значения параметров по умолчанию
У параметра может быть значение по умолчанию. Функция использует его всякий раз, когда в вызове этот аргумент опущен:
Пример
name = "друг", которая выводит приветствие.
Вызовите её с "Emil", "Tobias", без аргумента и с "Linus".
Вывод: полная программа на Python
def my_function(name = "друг"):
print("Привет,", name)
my_function("Emil")
my_function("Tobias")
my_function()
my_function("Linus")
Пример
Параметр country со значением по умолчанию:
country = "Norway", которая выводит «Я из», а затем страну.
Вызовите её с "Sweden", "India", без аргумента и с "Brazil".
Вывод: полная программа на Python
def my_function(country = "Norway"):
print("Я из", country)
my_function("Sweden")
my_function("India")
my_function()
my_function("Brazil")
Именованные аргументы
Аргументы можно передавать и в форме ключ = значение.
Поскольку каждое значение помечено именем, порядок их записи больше не имеет значения.
В документации Python Keyword Arguments (именованные аргументы) часто сокращают до kwargs.
Пример
animal и name, которая выводит информацию о питомце.
Вызовите её с именованными аргументами animal = "собака" и name = "Buddy".
Вывод: полная программа на Python
def my_function(animal, name):
print("У меня есть", animal)
print("Животное:", animal + ", кличка:", name)
my_function(animal = "собака", name = "Buddy")
Пример
animal и name.
Вызовите её с именованными аргументами в обратном порядке: name = "Buddy", animal = "собака".
Вывод: полная программа на Python
def my_function(animal, name):
print("У меня есть", animal)
print("Животное:", animal + ", кличка:", name)
my_function(name = "Buddy", animal = "собака")
Позиционные аргументы
Аргументы, переданные без указания имён, называются позиционными.
Python сопоставляет их с параметрами по позиции, поэтому они должны идти в правильном порядке.
Если поменять их местами, результат будет другим.
Пример
animal и name.
Вызовите её с позиционными аргументами "собака" и "Buddy".
Вывод: полная программа на Python
def my_function(animal, name):
print("У меня есть", animal)
print("Животное:", animal + ", кличка:", name)
my_function("собака", "Buddy")
Пример
Если изменить порядок, результат будет другим:
Вывод: полная программа на Python
def my_function(animal, name):
print("У меня есть", animal)
print("Животное:", animal + ", кличка:", name)
my_function("Buddy", "собака")
Сочетание позиционных и именованных аргументов
В одном вызове функции можно использовать и позиционные, и именованные аргументы.
Единственное правило: позиционные идут первыми:
Пример
animal, name и age.
Вызовите её, смешивая позиционные и именованные аргументы.
Вывод: полная программа на Python
def my_function(animal, name, age):
print("У меня есть", animal, "по кличке", name + ", возраст:", age)
my_function("собака", name = "Buddy", age = 5)
Передача разных типов данных
Аргументы могут быть любого типа данных: строка, число, список, словарь и так далее.
Внутри функции значение сохраняет тот же тип, который у него был при передаче:
Пример
Передача списка в функцию:
["apple", "banana", "cherry"].
Вывод: полная программа на Python
def my_function(fruits):
for fruit in fruits:
print(fruit)
my_fruits = ["apple", "banana", "cherry"]
my_function(my_fruits)
Пример
Передача словаря в функцию:
{"name": "Emil", "age": 25}.
Вывод: полная программа на Python
def my_function(person):
print("Имя:", person["name"])
print("Возраст:", person["age"])
my_person = {"name": "Emil", "age": 25}
my_function(my_person)
Возвращаемые значения
Оператор return позволяет функции вернуть значение:
Пример
Вывод: полная программа на Python
def my_function(x, y):
return x + y
result = my_function(5, 3)
print(result)
Возврат разных типов данных
Возвращаемое значение может быть любого типа данных, например список, кортеж или словарь.
Пример
Возврат списка:
Вывод: полная программа на Python
def my_function():
return ["apple", "banana", "cherry"]
fruits = my_function()
print(fruits[0])
print(fruits[1])
print(fruits[2])
Пример
Возврат кортежа:
Вывод: полная программа на Python
def my_function():
return (10, 20)
x, y = my_function()
print("x:", x)
print("y:", y)
Только позиционные аргументы
Функция может требовать, чтобы ей передавали ТОЛЬКО позиционные аргументы.
Для этого добавьте , / после аргументов, как показано в первом примере.
Без , / при вызове можно использовать именованные аргументы, даже если функция написана с расчётом на позиционные, как во втором примере.
Если , / есть, передача именованного аргумента вызывает ошибку, что и показывает третий пример.
Пример
/.
Вызовите её с позиционным аргументом.
Вывод: полная программа на Python
def my_function(name, /):
print("Привет,", name)
my_function("Emil")
Пример
/ функция допускает именованные аргументы.
Определите функцию с параметром name и вызовите её с name = "Emil".
Вывод: полная программа на Python
def my_function(name):
print("Привет,", name)
my_function(name = "Emil")
Пример
name, / и вызовите её с name = "Emil".
Вывод: полная программа на Python
def my_function(name, /):
print("Привет,", name)
my_function(name = "Emil")
Только именованные аргументы
Чтобы принимать только именованные аргументы, поставьте *, перед аргументами, как в первом примере.
Без *, при вызове можно передавать позиционные аргументы, даже если функция написана с расчётом на именованные. Так сделано во втором примере.
Если *, на месте, позиционный аргумент вызывает ошибку, как показывает третий пример.
Пример
*,.
Вызовите её с name = "Emil".
Вывод: полная программа на Python
def my_function(*, name):
print("Привет,", name)
my_function(name = "Emil")
Пример
*, функция допускает позиционные аргументы.
Определите функцию с параметром name и вызовите её с "Emil".
Вывод: полная программа на Python
def my_function(name):
print("Привет,", name)
my_function("Emil")
Пример
*, name и вызовите её с "Emil".
Вывод: полная программа на Python
def my_function(*, name):
print("Привет,", name)
my_function("Emil")
Сочетание только позиционных и только именованных аргументов
В одной функции можно использовать оба вида вместе.
Всё, что стоит перед /, должно быть позиционным, а всё, что стоит после *, должно передаваться как именованный аргумент:
Пример
/ и *, чтобы задать типы аргументов, и верните сумму.
Вывод: полная программа на Python
def my_function(a, b, /, *, c, d):
return a + b + c + d
result = my_function(5, 10, c = 15, d = 20)
print(result)