Questo è il mio codice:Passo vuoto/funzione noop/lambda come argomento di default
def execute(f, *args):
f(args)
volte mi voglio passare alcuna funzione f
-execute
, quindi voglio f
per impostazione predefinita alla funzione vuota.
Questo è il mio codice:Passo vuoto/funzione noop/lambda come argomento di default
def execute(f, *args):
f(args)
volte mi voglio passare alcuna funzione f
-execute
, quindi voglio f
per impostazione predefinita alla funzione vuota.
Non capisco molto bene cosa stai cercando di fare
Ma qualcosa del genere dovrebbe funzionare per te?
def execute(func=None, *args, **kwargs):
if func:
func(*args, **kwargs)
È inoltre possibile aggiungere un'altra istruzione per fare quello che vuoi.
Sì, funziona. Stavo cercando di sbarazzarmi di questa affermazione "se". – Randomblue
in questo caso se func è def func(): pass. Non hai bisogno del se. solo func (* args, ** kwargs) –
Il problema è che a volte non si vuole passare alcun argomento da eseguire, quindi voglio che la funzione sia predefinita alla funzione vuota.
funziona bene per me:
>>> def execute(function = lambda x: x, *args):
... print function, args
... function(args)
...
>>> execute()
<function <lambda> at 0x01DD1A30>()
>>>
faccio notare che il vostro esempio tenta di utilizzare f
nell'ambito dell'attuazione, mentre tu hai chiamato il parametro function
. Potrebbe essere davvero così semplice? ;)
Detto questo, è necessario capire che Python non avrà alcun senso dire che si desidera ignorare l'argomento in default a meno che non ci sono argomenti a tutti, quindi execute(0)
non può funzionare come di cercare di riparare 0
in funzione .
Siamo spiacenti, la domanda era terribilmente formulata. L'ho riscritto. – Randomblue
Per renderlo ancora più generico, renderlo 'lambda * x, ** xx: None'. Ora è effettivamente una funzione no-op universale - accetta qualsiasi numero di argomenti e argomenti di parole chiave. –
una funzione anonima ritorno Nessuno è spesso un adeguato no-op:
messaggiodef execute(func=lambda *a, **k: None, *args, **kwargs):
return func(*args, **kwargs)
Immagino che questo significhi che non c'è alcuna notazione più breve per 'lambda * a, ** k: None'. Ho provato 'func = pass', ma ovviamente non ha funzionato. – kasperd
Quale errore? E perché il tuo parametro si chiama 'function', ma tu chiami' f'? –
Probabilmente hai ricevuto il messaggio di errore 'nome globale 'f' non è definito 'perché, beh,' f' non è definito. Se hai un messaggio di errore diverso, specifica quale (tracciamento completo, per favore). –