Non sono mai sicuro di quale di questi sia la forma migliore:
Opzione A
def a(x,y):
def b(z): return z+y
return map(b, x)
print a([10,20], 5)
Opzione B
def b(z,y): return z+y
def a(x,y):
return map(lambda x: b(x,y), x)
print a([10,20], 5)
Supponiamo che b () venga chiamato SOLO da dentro a ().
So che l'opzione B è più efficiente perché dichiara solo b () una volta, e quindi la variabile y è appena passata come variabile di contesto. Ma l'opzione A sembra essere una sintassi più semplice, eliminando la necessità di costruire un lambda e semplificando l'interfaccia di b (). Supponiamo inoltre che possano esserci effettivamente molti argomenti di contesto. La complessità esplode nell'interfaccia di b ():
Opzione A2:
def a(x,y1,y2,y3,y4,y5):
def b(z): return z+y1+y2+y3+y4+y5
return map(b, x)
print a([10,20], 5,6,7,8,9)
Opzione B2:
def b(z,y1,y2,y3,y4,y5): return z+y1+y2+y3+y4+y5
def a(x,y1,y2,y3,y4,y5):
return map(lambda x: b(x,y1,y2,y3,y4,y5), x)
print a([10,20], 5,6,7,8,9)
L'opzione A2 è di gran lunga meno caratteri. Pensieri?