无法修改全局 int,但可以修改列表。如何?

2023-12-11

列表 = [] VAR1 = 0 def foo(): ... VAR1 += 1 ...返回VAR1 ...

通话中foo(),我收到此错误:

UnboundLocalError: local variable 'VAR1' referenced before assignment

但是,请考虑该列表LISTL

>>> def foo(x):
...     LISTL.append(x)
...     return LISTL
... 
>>> foo(5)
[5]

这按预期工作。问题是为什么列表上的追加有效但我无法更改 int?

另外,这是在 Python 中声明全局的正确方法吗? (就在导入语句之后)


造成这种差异的原因与 Python 命名空间的方式有关。如果你在函数定义中(def foo():),并且您访问一个名称(VAR1 or LISTL),它会首先搜索你的本地命名空间,在那里什么也找不到,然后它会搜索定义该函数的模块的命名空间,一直搜索到全局命名空间,直到找到匹配或失败。

然而,访问名称和分配名称是两个不同的概念。如果您再次在函数定义内,并且您说VAR1 = 2,您正在使用新的本地名称声明一个新变量VAR1函数内部。如果您考虑到如果工作中没有这样的命名空间,您将会遇到各种命名冲突,这是有道理的。

当您追加到列表时,您只是访问该列表,然后调用它的方法,该方法恰好改变了其概念值。当你使用 do+=,您实际上是在为名称分配一个值。

如果您希望能够为当前命名空间之外定义的名称赋值,您可以使用global keyword。在这种情况下,在你的函数中,你首先会说global VAR1,从那里开始,名称 VAR1 将是外部命名空间中的名称,并且对其进行的任何赋值都将在函数外部生效。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法修改全局 int,但可以修改列表。如何? 的相关文章

随机推荐

  • 诺基亚成像 SDK 与 EditingSession 类相关的问题

    我正在尝试通过查看developer nokia com 和其他几个网站上的示例来学习诺基亚成像SDK 大多数示例都告诉您使用这个 EditingSession 类 它是诺基亚成像 SDK 的一部分 但是当我尝试使用它时 出现以下错误 找不
  • PHP 转换 HTML 格式的日期

    从 Twitter 搜索 API Atom Feed 返回的发布日期为 2008 11 03T21 30 06Z 需要将其转换为 X 秒 分钟 小时 天前 以显示 Twitter 消息发布的时间 您认为这可以通过使用 DATE ATOM 值
  • R Shiny 动态选项卡编号和输入生成

    我当前的闪亮代码有问题 我必须根据给定函数的结果生成动态数量的选项卡 该部分工作正常 然后 我想在其他循环 例如 renderText 中生成这些选项卡的输入 但是 我生成的 renderText 的 textOutput 的最终输出始终是
  • 添加对 QuartzTypeLib 的程序集引用

    我是一名使用 Visual Studio 2008 的新程序员 如何添加对 QuartzTypeLib 的引用 我已经检查了添加引用文件夹 但在 net 或 com 参考库中没有看到 Quartz 的库 当尝试编译代码时 我收到一条错误 指
  • 将整数转换为实数的内部函数(16)

    将整数转换为四倍精度数的最佳方法是什么 对于双精度我使用 StrainStep MaximumStrain dble StrainIterations but now StrainStep and MaximumStrain are rea
  • 如何在 VB.NET 中从较大数组中获取子数组?

    I have Dim arr As String one two three 我想要一个新的数组 sub 仅包含 一 三 做到这一点的最佳方法是什么 对于这种特殊情况 最简单的选择就是列出要复制的两个项目 Dim sub arr 0 arr
  • 使用 Firebase 函数中的 Cloud SQL 代理

    我正在运行谷歌的云 SQL 代理在本地 它使用本地服务的 Firebase 功能 使用如下命令 cloud sql proxy instances my project 12345 us central1 my instance tcp 1
  • 如何在列表视图中拥有高级列表项

    我想让我的列表项看起来像这样 我有一个具有与其关联的 值的项目列表 这个布局看起来真的很吸引人 谁能告诉我如何做到这一点 这是我尝试过的代码
  • $.ajaxSetup 中的 beforeSend + $.ajax 中的 beforeSend

    为了解决 CSRF 问题 我使用 Ajax 客户端设置 ajaxSetup beforeSend function xhr settings function getCookie name var cookieValue null if d
  • Java 中的互斥量和信号量是什么?主要区别是什么?

    Java 中的互斥量和信号量是什么 主要区别是什么 不幸的是 每个人都忽略了信号量和互斥体之间最重要的区别 的概念 所有权 信号量没有所有权的概念 这意味着任何线程都可以释放信号量 这本身可能会导致许多问题 但有助于 死亡检测 而互斥体确实
  • 在 C/C++ 中写入非打印字符的行为是什么?

    如果字符是通过写入的 则写入非打印字符的行为是否未定义或实现定义printf fprintf 我很困惑 因为 C 标准 N1570 5 2 2 中的单词只讨论打印字符和字母转义序列的显示语义 另外 如果字符是通过写的呢 std ostrea
  • 检测SD卡硬件驱动器盘符

    有没有办法在 Windows 上以编程方式检测 SD 卡的驱动器盘符 该方法是否支持内部和外部 SD 卡硬件 感谢您的时间 你可以试试获取逻辑驱动器字符串获取驱动器号 然后使用获取驱动器类型查看驱动器是否可移动 然后您可以获得更多的设备信息
  • RSelenium 和 Javascript

    我对 R 相当精通 但对 javaScript 和其他语言完全一无所知 我想访问有关此公开数据集的信息 http fyed elections on ca fyed en form page en jsp 特别是 我在数据框中有一个包含数千
  • JQuery限制两个日期选择器之间的差异

    我有 2 个日期选择器 function DateFrom datepicker onSelect showUser minDate 90 maxDate 1D function DateTo datepicker onSelect sho
  • 如何使用 Spring MVC 和多种响应类型支持 JSONP

    我在控制器中有一个方法 它将根据要求返回 HTML 或 JSON 这是这种方法的一个精简示例 根据我在中找到的有关如何执行此操作的信息进行建模这个问题 RequestMapping value callback public ModelAn
  • 无法在 Jupyter Notebook 中导入 Tensorflow

    我尝试在 conda 环境中的 Jupyter 笔记本中导入 Tensorflow 模块 但出现以下错误 AttributeError type object h5py h5 H5PYConfig has no attribute redu
  • Unity3D - 在 Android 上接到任何呼叫/通知后音频播放变得静音

    我在 Android 版本上遇到音频播放问题 我使用的是 Unity 5 4 0b15 但我在 5 3 4p3 上遇到了同样的问题 我在场景中的 AudioPlayer 游戏对象中添加了用于播放背景音乐的简单组件 public AudioC
  • AS3中的实时更新和推送数据

    我想对我的 Flash 应用程序进行实时更新 我更喜欢推送技术 而不是每 30 秒刷新一次 在 Actionscript 3 中推送数据的最佳方式是什么 有两种流行的实现实时更新的选项 套接字和 RTMP 每种方法都有优点和缺点 但主要决定
  • 使用 JasperReports API 在代码中出现“java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory”

    我正在开发一个简单的独立桌面应用程序 它将根据传递给程序的值生成报告 没有数据库使用 我已经使用 iReport 设计器设计了 JasperReports 报表并添加了一个参数ID NO和一个带有表达式的文本字段 P ID NO 我可以成功
  • 无法修改全局 int,但可以修改列表。如何?

    列表 VAR1 0 def foo VAR1 1 返回VAR1 通话中foo 我收到此错误 UnboundLocalError local variable VAR1 referenced before assignment 但是 请考虑该