python - python内部函数以不同方式对待可变变量和不可变变量
问题描述
我试图理解为什么内部函数可以访问外部列表(arr)而不是外部布尔变量(找到)。
def outer():
arr = [1, 2, 3]
found = False
print("outer func ids: ", id(arr), id(found))
def inner(num):
arr.append(4)
found = True
print("inner func ids:", id(arr), id(found))
inner(3)
print("outer func ids: ", id(arr), id(found))
return found
outer()
输出:
('outer func ids: ', 4536180248, 140736008926072)
('inner func ids:', 4536180248, 140736008926048)
('outer func ids: ', 4536180248, 140736008926072)
有人可以澄清一下。即使我们在内部函数中执行附加操作,为什么列表具有相同的 id?
解决方案
因为重新定义found
ininner
使它成为本地的。与可变与否无关。
推荐阅读
- hybris - 如何在 hybris 后台的参考搜索编辑器中禁用初始数据加载
- django - Django单元测试没有找到任何测试
- google-cloud-platform - 无法在 Google Cloud 中添加结算信息。出现意外错误。请稍后再试。[OR-3DSRFT-08]
- flutter - Flutter 如何对 Dio 401、500 响应进行单元测试
- reactjs - React.js - 将数据作为子参数传递给父方法
- c# - WPF 框架内容在单元测试中为空
- javascript - 从反应组件中查找和更改物化生成的 html 元素
- karate - 根据日志级别(WARN、INFO、DEBUG 等)在报告门户中不显示日志
- java - 2021-04-05T16:25:45.000+00:00 SimpleDateFormat 中的时间戳更改(“yyyy-MM-dd hh:mm:ss a”)
- html - 如何在闪亮中利用 navlistPanel 下方的空间?