Argomenti basati su parole chiave sono argomenti che possono essere forniti solo a funzione per parola chiave. In Python sono definiti da un singolo asterisco nella firma di una funzione. Ad esempio:
>>> def foo(bar, *, baz):
print(bar, baz)
>>> foo(1, baz=2)
1 2
>>> foo(1, 2)
TypeError: foo() takes 1 positional argument but 2 were given
L'utilizzo di questi non ha solo vantaggi e svantaggi stilistici, ma anche funzionale. Ecco alcuni dei quali sono a conoscenza:
Vantaggi:
- È meno soggetto a errori. Quando si hanno argomenti posizionali in una chiamata di funzione, cambiare una firma può rompere le cose. Con argomenti solo parole chiave non esiste un problema di questo tipo. ( link , link , < a href="https://bugs.python.org/issue25628"> link )
E svantaggi:
-
Rendendo tutti gli argomenti solo per parole chiave non è consentito utilizzare la funzione con
map
. Ad esempio:>>> def square(*, x): return x * 2 >>> list(map(square, [1, 2, 3])) TypeError: square() takes 0 positional arguments but 1 was given
Non sono riuscito a trovare una descrizione generale su come dovrei usare correttamente gli argomenti solo per le parole chiave in PEP 3102 che li ha proposti in primo luogo o in altre fonti.
Quindi, le mie domande sono: ci sono altre insidie di cui sono inconsapevole quando uso argomenti con parole chiave? Come posso usarli tranquillamente senza potenzialmente rompere qualcosa in futuro?