Tôi luôn nghĩ rằng các hàm Python 2.7 tham chiếu đến phạm vi mà chúng đã được định nghĩa. Hãy xem xét mã sau đây. Tại sao đầu ra thứ hai không phải là "tính: sin"?Hiểu về các đóng cửa của Python
Có cách nào để sửa đổi mã để mã hoạt động như mong đợi không?
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)