Ho una funzione che, nel più semplice dei casi, opera su un iterabile di elementi.Gestisce in modo elegante diversi tipi di parametri
def foo(items):
for item in items:
# do stuff
A volte, io non voglio passare un iterabile di voci direttamente, ma piuttosto un oggetto che fornisce un metodo per ottenere il iterabili:
def foo(obj):
for item in obj.iteritems():
# do same stuff as above
posso unire questi due casi come questo :
Questo funziona bene. Ora ho una terza caso d'uso che assomiglia a questo:
def foo(objs):
for item in itertools.chain.from_iterable(obj.iteritems() for obj in objs):
# do same stuff again
posso ancora usare l'approccio try-except
, dal momento che le interfacce sono incompatibili. Tuttavia, il tentativo di cattura annidato inizierà a diventare molto brutto. Ancora di più quando voglio aggiungere un quarto caso d'uso. C'è un modo per risolvere questo problema senza annidare i blocchi try
?
Ah, I * so * vorrei che esistessero sovraccarichi di funzione in Python! –
@ André: quasi sempre in Python, se vuoi quel tipo di sovraccarico di funzione/metodo, lo stai facendo nel modo sbagliato. –
Ma qual è il problema con l'invio esplicito del iterable? troppo prolisso? – tokland