Zawsze uważałem, że funkcje Pythona 2.7 odnoszą się do zakresu, w jakim zostały zdefiniowane. Rozważmy następujący kod. Dlaczego drugie wyjście nie oznacza "obliczenia: sin"?Zrozumienie zamknięć w Pythonie
Czy istnieje sposób zmodyfikowania kodu, aby działał zgodnie z oczekiwaniami?
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)