Ho sempre pensato che le funzioni di Python 2.7 si riferissero all'ambito in cui erano definite. Considera il seguente codice. Perché la seconda uscita non è "calcolando: sin"?Informazioni sulle chiusure Python
C'è un modo per modificare il codice in modo che funzioni come previsto?
import math
mymath = dict()
for fun in ["sin", "cos"]:
def _impl(val):
print "calculating: %s" % fun
return getattr(math, fun)(val)
mymath[fun] = _impl
# calculating: cos
print mymath["cos"](math.pi)
# calculating: cos <- why?
print mymath["sin"](math.pi)