Ce face functools.partial() și partialmethod()
partial(f, a, x=1) returnează o funcție care, apelată cu (b), execută f(a, b, x=1). Este utilă când o funcție trebuie dată ca parametru (de exemplu la map() sau ca funcție de apel ulterior) și vrei să fixezi unele argumente.
partialmethod() face același lucru pentru metodele unei clase, ținând cont de self.
Parametri
| Parametru | Descriere |
|---|---|
functie |
Funcția de bază. |
*args, **kwargs |
Argumentele fixate. |
Ce returnează
Un obiect apelabil partial.
Exemple
Exemplul 1: Argumente fixate
from functools import partial
din_binar = partial(int, base=2)
print(din_binar("1010"), din_binar("1111"))
def pret_final(pret, tva, reducere=0):
return round(pret * (1 + tva) * (1 - reducere), 2)
cu_tva_redus = partial(pret_final, tva=0.09)
print(list(map(cu_tva_redus, [10, 20, 30])))
print(cu_tva_redus.func.__name__, cu_tva_redus.keywords)
Rezultat
10 15
[10.9, 21.8, 32.7]
pret_final {'tva': 0.09}
Exemplul 2: partialmethod
from functools import partialmethod
class Lampa:
def __init__(self):
self.aprinsa = False
def seteaza(self, stare):
self.aprinsa = stare
aprinde = partialmethod(seteaza, True)
stinge = partialmethod(seteaza, False)
l = Lampa()
l.aprinde()
print(l.aprinsa)
l.stinge()
print(l.aprinsa)
Rezultat
True
False
Greșeli frecvente
- Fixezi un argument pozițional care nu este primul și argumentele ajung în altă ordine decât te aștepți. Pentru claritate, fixează-le după nume.