letto una domanda su stack overflow qualche tempo indietro con la seguente sintassiconfondersi con lambda e di lista
In [1]: [lambda: x for x in range(5)][0]()
Out[1]: 4
In [2]: [lambda: x for x in range(5)][2]()
Out[2]: 4
Ma io sto avendo un momento difficile capire perché esattamente l'output di questo si presenta come 4, mia comprensione è che dà sempre l'ultimo valore della lista come uscita,
In [4]: [lambda: x for x in [1,5,7,3]][0]()
Out[4]: 3
ma ancora non convinto come fa questa sintassi finisce con l'ultimo valore.
sarebbe molto contento se posso ottenere una spiegazione adeguata per questa sintassi
Pensi che potresti trovare quella domanda che hai menzionato? Questo è interessante, mi piacerebbe capirlo anche :) – kevintodisco
'In [84]: [z() per z in (lambda: x per x nel range (5))]' 'Out [84]: [0, 1, 2, 3, 4] ' ' In [85]: [z() per z in [lambda: x per x nell'intervallo (5)]] ' ' Out [85]: [4 , 4, 4, 4, 4] ' se viene utilizzato il generatore anziché la comprensione delle liste, anche l'output sarà diverso! – shahjapan
@ktodisco: Sono abbastanza sicuro che è la mia domanda: http://stackoverflow.com/questions/9189702/python-closures-and-cells-closed-over-values –