Rozdział 13 · Automatyzacja z funkcjami

Positional-only i keyword-only

Czasami chcesz wymusić, by argument był przekazywany tylko przez nazwę (lub tylko pozycję) — sygnatura funkcji może tego wyraźnie wymagać.

Keyword-only parametry — praktyczne już teraz

Są parametry, które CHCESZ wymusić, by przekazywały się tylko z nazwy – zazwyczaj są to opcjonalne flagi lub ustawienia, gdzie pozycja „goła”

keyword_only.py
def draw_rectangle(width, height, *, color="blue", filled=False):
    ...

draw_rectangle(100, 50, color="red")   # możesz
Single * na liście opcji
Wszystko, co stoi PO samotności * w definicji funkcji musi być przekazywane nazwą przy wywołaniu — parametry pozycyjne nie mogą być przekazane.
bez_keyword_only.py
draw_rectangle(100, 50, "red", True)
# co tu jest True? filled? Nieoczywiste.
s_keyword_only.py
draw_rectangle(
    100,
    50,
    color="red",
    filled=True,
)
# od razu widać, co jest czym

Druga opcja jest znacznie szybsza do czytania i zrozumienia — dlatego istnieją keyword-only parametrów.

Trochę głębiej – positional-only parametry

Rzadziej, ale też występuje odwrotna sytuacja: parametr, który MOŻE być przekazany tylko pozycjonalnie, bez nazwy.

positional_only.py
def function(x, /):
    ...
Samotny / w liście parametrów
Wszystko, co warte PRZED /, można przekazać tylko pozycyjnie — nazwy parametru nie można używać podczas wywołania. Tak robi się, gdy autor funkcji nie chce, aby nazwa parametru stała się częścią „kontraktu” — będzie można ją swobodnie zmieniać w przyszłości, bez łamania kodu, który ją wywołuje.

Anatomia pełnej sygnatury

signatura.py
def draw(
    x, y, /,
    width, height,
    *,
    color="blue",
    filled=False,
):
    ...
Jeden podpis, trzy strefy
x, y
tylko pozycyjnie
do /
width, height
pozycjonalnie LUB po imieniu
pomiędzy / a *
color, filled
tylko z imienia
po *
Nie musisz tego zapamiętywać za pierwszym razem
To zaawansowana, ale cenna umiejętność czytania API — szczególnie przydatna przy czytaniu dokumentacji zewnętrznych bibliotek. Dla własnych małych funkcji zwykle wystarczą zwykłe parametry bez / i samotny * — używaj ich świadomie, gdy naprawdę poprawia czytelność wywołania.
Praktyka: keyword-only parametry
interaktywny laptop bezpośrednio w przeglądarce – Python 3.14 przez Pyodide, bez instalacji
Otwórz praktykę →