Numero sconosciuto di argomenti in corso

2

Situazione ipotetica - una funzione currying può avere un numero sconosciuto di argomenti (tipo di varargs simili) Ad esempio in Python:

addByCurrying(1)(2)(3)(4)

Dovrebbe essere uguale a 10

addByCurrying(5)(6)

Dovrebbe essere uguale a 11

Come potrei implementarlo?

    
posta vikarjramun 24.08.2016 - 04:07
fonte

2 risposte

4

Recentemente ho risposto a una domanda su S.O riguardante questa esatta situazione. non puoi farlo con le funzioni tradizionali in Python.

Puoi puoi farlo sfruttando callables , sovraccaricando il __call__ dunder di una sottoclasse int .

In breve, restituisci una nuova istanza di te stesso con il valore aggiornato ( + qui):

class addByCallable(int):
    def __call__(self, v):
        return type(self)(self + v)

Ora lo chiami e ottieni questo 'modulo' di currying:

addByCallable(1)(2)(3)  # 6

Che è il più vicino possibile a farlo in Python.

    
risposta data 25.08.2016 - 01:17
fonte
1

Questo non è possibile poiché non è possibile sapere se la funzione dovrebbe restituire un numero o una funzione al curry.

Ci sono vari modi per "barare" per ottenere qualcosa di simile a questo, per esempio puoi chiamare senza argomenti per ottenere il numero piuttosto che una funzione:

addByCurrying(1)(2) --> curried function
addByCurrying(1)(2)() --> the number 3

Quale trucco è più appropriato dipende da cosa stai cercando di ottenere.

    
risposta data 24.08.2016 - 12:18
fonte

Leggi altre domande sui tag