1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| def C1_sum(u1, u2):
return lambda L, u1=u1, u2=u2: sum(L[-4:])
def C3_sum(v1, v2):
return lambda L, v1=v1, v2=v2: sum(L[-2:] + L[:2])
def C5_sum(w1, w2):
return lambda L, w1=w1, w2=w2: sum(L[:4])
# ca fait l'équivalent de ton 'dict' dans les 'locals'.
# je transporte (u1, u2), (v1, v2), (w1, w2), pour montrer qu'on peut
# le faire mais aucun intérêt dans le cas 'sum'
def op_sum(L):
# on retrouve la factory qui assigne l'opération en fonction de la forme de L
u1, u2, v1, v2, w1, w2 = L
if u1 == u2:
return C1_sum(u1, u2)
elif v1 == v2:
return C3_sum(v1, v2)
elif w1 == w2:
return C5_sum(w1, w2)
else: pass
L1 = [1, 1, 3, 4, 5, 6]
L2 = [1, 2, 1, 1, 5, 6]
L3 = [1, 2, 3, 4, 1, 1]
c1 = op_sum(L1)
print c1(L1)
print op_sum(L2)(L2)
print op_sum(L3)(L3) |
Partager