Глава 13 · Автоматизация с помощью функций
Positional-only и keyword-only
Иногда хочется заставить аргумент передаваться только по имени (или только по позиции) — сигнатура функции умеет это явно требовать.
Keyword-only параметры — практично уже сейчас
Бывают параметры, которые ХОЧЕТСЯ заставить передавать только по имени — обычно это необязательные флаги или настройки, где голая позиция путает читателя:
keyword_only.py
def draw_rectangle(width, height, *, color="blue", filled=False):
...
draw_rectangle(100, 50, color="red") # можно
Одинокая * в списке параметров
Всё, что стоит ПОСЛЕ одинокого
* в определении функции, обязано передаваться по имени при вызове — позиционно эти параметры передать нельзя.bez_keyword_only.py
draw_rectangle(100, 50, "red", True)
# что здесь True? filled? Неочевидно.
s_keyword_only.py
draw_rectangle(
100,
50,
color="red",
filled=True,
)
# сразу понятно, что есть что
Второй вариант читается и понимается значительно быстрее — именно ради этого существуют keyword-only параметры.
Чуть глубже — positional-only параметры
Реже, но тоже встречается обратная ситуация: параметр, который МОЖНО передавать только позиционно, без имени.
positional_only.py
def function(x, /):
...
Одинокая / в списке параметров
Всё, что стоит ДО
/, можно передать только позиционно — имя параметра нельзя использовать при вызове. Так делают, когда автор функции не хочет, чтобы имя параметра стало частью «контракта» — его можно будет свободно менять в будущем, не ломая код, который её вызывает.Анатомия полной сигнатуры
signatura.py
def draw(
x, y, /,
width, height,
*,
color="blue",
filled=False,
):
...
Одна сигнатура, три зоны
x, y
только позиционно
до /
width, height
позиционно ИЛИ по имени
между / и *
color, filled
только по имени
после *
Не обязательно запоминать наизусть с первого раза
Это продвинутая, но ценная грамотность чтения API — она особенно пригодится при чтении документации сторонних библиотек. Для собственных небольших функций чаще всего достаточно обычных параметров без
/ и одинокой * — используйте их осознанно, когда это действительно улучшает читаемость вызова.Практика: keyword-only параметры
Интерактивный ноутбук прямо в браузере — Python 3.14 через Pyodide, без установки