gpt4 book ai didi

python - 了解 Python 闭包

转载 作者:太空狗 更新时间:2023-10-29 21:34:09 24 4
gpt4 key购买 nike

我一直认为 Python 2.7 函数引用它们定义的范围。考虑以下代码。为什么第二个输出不是“正在计算:sin”

有什么方法可以修改代码使其按预期工作吗?

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)

最佳答案

fun 的值在调用函数时计算。

在您提供的示例中,fun 是一个全局变量,在 for 循环运行后它的值为“cos”。

我认为您希望在创建函数时替换 fun 的值,但事实并非如此。该函数按预期运行时会评估变量的值。

这与您在其中定义函数的命名空间无关,而是与您在其中运行该函数的命名空间有关。

import math

mymath = dict()

for fun in ["sin", "cos"]:
def _impl(val):
print "calculating: %s" % fun
return getattr(math, fun)(val)
mymath[fun] = _impl


fun = 'tan'
# will print and calculate tan
print mymath["cos"](math.pi)

关于python - 了解 Python 闭包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30298220/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com