voglio usare parziale functools di applicare parzialmente secondo argomento di una funzione, so che è facile da fare con lambda non parziale come seguecome applicare parzialmente l'argomento arbitrario di una funzione?
>>> def func1(a,b):
... return a/b
...
>>> func2 = lambda x:func1(x,2)
>>> func2(4)
2
ma strettamente desidera utilizzare parziali qui (per il bene di apprendimento) così mi è venuto in mente questo.
>>> def swap_binary_args(func):
... return lambda x,y: func(y,x)
...
>>> func3 = partial(swap_binary_args(func1),2)
>>> func3(4)
2
E 'possibile estendere questa strategia a un livello in cui posso applicare parziale alcun argomento in qualsiasi luogo come nel seguente pseudocodice
>>>def indexed_partial(func, list_of_index, *args):
... ###do_something###
... return partially_applied_function
>>>func5=indexed_partial(func1, [1,4,3,5], 2,4,5,6)
nel nostro caso posso usare questa funzione come segue
>>>func6=indexed_partial(func1, [1], 2)
È possibile avere un parziale indicizzato come desidero? c'è qualcosa di simile a questo già di cui non sono a conoscenza? e ancora più importante è l'idea di parziale indicizzata generalmente un'idea buona o cattiva perché?
Questa domanda è stato contrassegnato come possibile duplicato di Can one partially apply the second argument of a function that takes no keyword arguments? a questa domanda il PO ha chiesto è possibile applicare parzialmente secondo argomento, ma qui sto chiedendo come cucinare una funzione che può applicare parzialmente qualsiasi argomento arbitrario
Avete preso in considerazione solo utilizzando argomenti con nome? 'functools.partial' li consente, ed è così che lo gestirai in codice reale, anche se forse non si adatta al tuo esercizio. – jwilner
Probabilmente si potrebbe cucinare qualcosa usando 'inspect.getargspec' e vincolando usando i nomi di arg. – tzaman
@jwilner parziale con argomento parola chiave sarebbe praticamente equivalente a quello che sto cercando di ottenere, invece di usare l'indice dovrei usare le chiavi. Grazie :) – k4vin