python - 如果在__main__中调用python闭包,闭包仍然可以访问函数中的变量。这怎么可能?
问题描述
在阅读 React hock 文档时,我发现函数在 JavaScript 中的工作方式与我在 C 中的预期不同。我也很好奇 Python 函数的工作方式与 JavaScript 类似,而且确实如此。下面是代码
def useState(initialValue):
_val = initialValue
def state():
return _val
def setState(newVal):
nonlocal _val
_val = newVal
return state, setState
foo, setFoo = useState(0)
foo() # return 0; I expected that it should raise error because _val does not exist anymore after running useState function.
setFoo(1)
foo() # return 1
我虽然 Python 函数像 C 中的函数一样工作。我期望的是 Python 函数中的每个变量都在堆栈中,并且在执行函数之后,堆栈(变量)被删除。但是“setFoo”闭包仍然可以访问 useState 函数中的变量,并且调用 foo 返回状态。有人可以解释 Python 函数的工作原理或提供解释它如何工作的站点的参考吗?
解决方案
推荐阅读
- tabs - 如何刷新离子4中的标签
- javascript - 输入更改时Edge中的调用对象无效(onChange)
- java - 从 Java 中的字符串中获取特定的数据值(不带逗号的字符串)
- c - 初始化二维数组是否可以将连续整数映射到 C 中的字符串?
- java - flatMap 需要不必要的强制转换
- java - 从生产者消息中提取时间戳
- superset - 通过 filter_box 或其他一些机制进行负过滤
- c++ - 我的 Pong 游戏在 C++ 中收到无响应警告
- c# - 我可以使用 Swashbuckle 从 Blazor 项目 c# 生成 Swagger UI
- java - 未在可执行 jar 中加载的库