为什么不需要“global”关键字来访问全局变量?

2024-01-29

根据我的理解,Python 有一个单独的函数命名空间,所以如果我想在函数中使用全局变量,我可能应该使用global.

但是,即使没有,我也能够访问全局变量global:

>>> sub = ['0', '0', '0', '0']
>>> def getJoin():
...     return '.'.join(sub)
...
>>> getJoin()
'0.0.0.0'

为什么这有效?


See also UnboundLocalError on local variable when reassigned after first use https://stackoverflow.com/questions/370357 for the error that occurs when attempting to assign to the global variable without global. See Using global variables in a function https://stackoverflow.com/questions/423379/ for the general question of how to use globals.


关键词global仅适用于在本地上下文中更改或创建全局变量,尽管创建全局变量很少被认为是一个好的解决方案。

def bob():
    me = "locally defined"    # Defined only in local context
    print(me)

bob()
print(me)     # Asking for a global variable

以上将为您提供:

locally defined
Traceback (most recent call last):
  File "file.py", line 9, in <module>
    print(me)
NameError: name 'me' is not defined

而如果你使用global声明后,该变量将在函数范围“外部”可用,从而有效地成为全局变量。

def bob():
    global me
    me = "locally defined"   # Defined locally but declared as global
    print(me)

bob()
print(me)     # Asking for a global variable

所以上面的代码会给你:

locally defined
locally defined

此外,由于Python的性质,您还可以使用global在本地上下文中声明函数、类或其他对象。尽管我建议不要这样做,因为如果出现问题或需要调试,它会导致噩梦。

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

为什么不需要“global”关键字来访问全局变量? 的相关文章

  • 如果两点之间的距离低于某个阈值,则从列表中删除点

    我有一个点列表 只有当它们之间的距离大于某个阈值时 我才想保留列表中的点 因此 从第一个点开始 如果第一个点和第二个点之间的距离小于阈值 那么我将删除第二个点 然后计算第一个点和第三个点之间的距离 如果该距离小于阈值 则比较第一点和第四点
  • 中断 Select 以添加另一个要在 Python 中监视的套接字

    我正在 Windows XP 应用程序中使用 TCP 实现点对点 IPC 我正在使用select and socketPython 2 6 6 中的模块 我有三个 TCP 线程 一个读取线程通常会阻塞select 一个通常等待事件的写入线程
  • 与区域指示符字符类匹配的 python 正则表达式

    我在 Mac 上使用 python 2 7 10 表情符号中的标志由一对表示区域指示符号 https en wikipedia org wiki Regional Indicator Symbol 我想编写一个 python 正则表达式来在
  • 在 django ORM 中查询时如何将 char 转换为整数?

    最近开始使用 Django ORM 我想执行这个查询 select student id from students where student id like 97318 order by CAST student id as UNSIG
  • 安装了 32 位的 Python,显示为 64 位

    我需要运行 32 位版本的 Python 我认为这就是我在我的机器上运行的 因为这是我下载的安装程序 当我重新运行安装程序时 它会将当前安装的 Python 版本称为 Python 3 5 32 位 然而当我跑步时platform arch
  • Python 中的舍入浮点问题

    我遇到了 np round np around 的问题 它没有正确舍入 我无法包含代码 因为当我手动设置值 而不是使用我的数据 时 返回有效 但这是输出 In 177 a Out 177 0 0099999998 In 178 np rou
  • Python getstatusoutput 替换不返回完整输出

    我发现了这个很棒的替代品getstatusoutput Python 2 中的函数在 Unix 和 Windows 上同样有效 不过我觉得这个方法有问题output被构建 它只返回输出的最后一行 但我不明白为什么 任何帮助都是极好的 def
  • 需要在python中找到print或printf的源代码[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在做一些我不能完全谈论的事情 我
  • 使用Python请求登录Google帐户

    在多个登录页面上 需要谷歌登录才能继续 我想用requestspython 中的库以便让我自己登录 通常这很容易使用requests库 但是我无法让它工作 我不确定这是否是由于 Google 做出的一些限制 也许我需要使用他们的 API 或
  • YOLOv8获取预测边界框

    我想将 OpenCV 与 YOLOv8 集成ultralytics 所以我想从模型预测中获取边界框坐标 我该怎么做呢 from ultralytics import YOLO import cv2 model YOLO yolov8n pt
  • Pandas Merge (pd.merge) 如何设置索引和连接

    我有两个 pandas 数据框 dfLeft 和 dfRight 以日期作为索引 dfLeft cusip factorL date 2012 01 03 XXXX 4 5 2012 01 03 YYYY 6 2 2012 01 04 XX
  • 如何通过索引列表从 dask 数据框中选择数据?

    我想根据索引列表从 dask 数据框中选择行 我怎样才能做到这一点 Example 假设我有以下 dask 数据框 dict A 1 2 3 4 5 6 7 B 2 3 4 5 6 7 8 index x1 a2 x3 c4 x5 y6 x
  • 如何使用 pybrain 黑盒优化训练神经网络来处理监督数据集?

    我玩了一下 pybrain 了解如何生成具有自定义架构的神经网络 并使用反向传播算法将它们训练为监督数据集 然而 我对优化算法以及任务 学习代理和环境的概念感到困惑 例如 我将如何实现一个神经网络 例如 1 以使用 pybrain 遗传算法
  • 不同编程语言中的浮点数学

    我知道浮点数学充其量可能是丑陋的 但我想知道是否有人可以解释以下怪癖 在大多数编程语言中 我测试了 0 4 到 0 2 的加法会产生轻微的错误 而 0 4 0 1 0 1 则不会产生错误 两者计算不平等的原因是什么 在各自的编程语言中可以采
  • python import inside函数隐藏现有变量

    我在我正在处理的多子模块项目中遇到了一个奇怪的 UnboundLocalError 分配之前引用的局部变量 问题 并将其精简为这个片段 使用标准库中的日志记录模块 import logging def foo logging info fo
  • Python ImportError:无法导入名称 __init__.py

    我收到此错误 ImportError cannot import name life table from cdc life tables C Users tony OneDrive Documents Retirement retirem
  • 模拟pytest中的异常终止

    我的多线程应用程序遇到了一个错误 主线程的任何异常终止 例如 未捕获的异常或某些信号 都会导致其他线程之一死锁 并阻止进程干净退出 我解决了这个问题 但我想添加一个测试来防止回归 但是 我不知道如何在 pytest 中模拟异常终止 如果我只
  • 如何计算Python中字典中最常见的前10个值

    我对 python 和一般编程都很陌生 所以请友善 我正在尝试分析包含音乐信息的 csv 文件并返回最常听的前 n 个乐队 从下面的代码中 每听一首歌曲都是一个列表中的字典条目 格式如下 album Exile on Main Street
  • 在 JavaScript 函数的 Django 模板中转义字符串参数

    我有一个 JavaScript 函数 它返回一组对象 return Func id name 例如 我在传递包含引号的字符串时遇到问题 Dr Seuss ABC BOOk 是无效语法 I tried name safe 但无济于事 有什么解
  • cv2.VideoWriter:请求一个元组作为 Size 参数,然后拒绝它

    我正在使用 OpenCV 4 0 和 Python 3 7 创建延时视频 构造 VideoWriter 对象时 文档表示 Size 参数应该是一个元组 当我给它一个元组时 它拒绝它 当我尝试用其他东西替换它时 它不会接受它 因为它说参数不是

随机推荐

  • 如何通过自动显式查看类型推断的结果?

    我最近正在研究C 11 14的自动功能 出于教育目的 我想明确显示我的代码的类型推断结果 我尝试了 typeid name 但我发现这种方法有两个问题 输出有时难以理解 例如 NSt3 16vectorIiNS 9allocatorIiEE
  • 如何用JQuery实现FLXHR进行跨域交互

    我正在使用 JQuery FLXHR 从跨浏览器获取数据 下面是示例jquery代码 set up the domain that we re going to call and tell flXHR not to try to parse
  • 创建全天活动失败

    我正在尝试创建一个全天活动 let foobar any subject calendarEvent Title v5 body contentType HTML content calendarEvent calendarEvent De
  • 代码覆盖率和分析之间的区别

    代码代码覆盖率和分析之间有什么区别 这是最好的代码覆盖率开源工具 代码覆盖率是对代码已运行量的评估 这用于查看测试对代码的执行情况 分析用于查看代码各个部分的执行情况 这些工具取决于您使用的语言和平台 我猜你正在使用Java 所以推荐代码覆
  • 什么是 stdole2.tlb

    stdole32 tlb 包含所有基本类型定义 如果我们使用 MIDL 则每个库都必须导入它 但是当我创建 ATL DLL 项目时 lib 文件看起来像这样 import oaidl idl import ocidl idl uuid 4C
  • SOA 服务设计/身份验证

    我对 SOA 相当陌生 因此正在尝试 目前 对我来说最大的问题是身份验证 我目前的想法涉及以下内容 客户端向身份验证 用户服务发送某种身份验证消息 该服务查询数据库 如果找到用户并且密码有效 它将使用会话 ID 进行响应 该 ID 将用于所
  • 在 IIS 中运行发布的网站时出现 NullReferenceException

    我有一个在将其添加到 IIS 之前发布的网站 之后我将发布的网站设置为 IIS 中的默认网站 当我通过表单插入值时 出现错误 对象引用未设置为对象的实例 网站在IIS中运行而不发布时没有问题 使用数据网格插入值时会发生错误 错误信息如下 应
  • mode=remoteOnly 的 ASP.NET customErrors 和 global.asax 处理异常

    我在 Web 配置文件中设置了自定义错误 如下所示
  • 使用正则表达式匹配记录中的名称、对话和动作

    给定如下所示的字符串对话 我需要找到与每个用户对应的句子 text CHRIS Hello how are you PETER Great you PAM He is resting PAM SHOWS THE COUCH PETER IS
  • 我可以生成没有绑定和服务信息的 WSDL 文件吗?

    我遇到一个问题 客户可以使用 net beans 以及在 NET 中打开 SAP WSDL 但不能在 SOAPUI 中打开 当我检查 WSDL 时 我发现服务和绑定标签未定义或不包含此类标签 WSDL 以端口类型信息结束 在 SOAPUI
  • 如何为Python制作一个具有良好图形效果的.exe?

    我有一个 Python 应用程序 我决定创建一个 exe 来执行它 这是我用来执行 exe 的代码 coding cp1252 from distutils core import setup import py2exe sys os sy
  • “workbooks.worksheets.activate”有效,但“.select”无效

    谁能告诉我为什么当我引用特定的工作表时我可以使用 workbooks A worksheets B activate but not workbooks A worksheets B select 您无法选择非活动工作簿中的工作表 您必须首
  • ASP.NET Core 在开发环境中禁用身份验证

    是否可以在 ASP NET Core 应用程序中 禁用 身份验证而不更改其逻辑 我有一个 net 网站 它使用外部身份服务器应用程序进行身份验证 无论如何 我希望能够在开发时模拟身份验证 ASPNETCORE ENVIRONMENT Dev
  • 使用 pm2 在同一节点上运行多个节点实例

    我想使用 pm2 在单个服务器上运行 2 个 node js 应用程序 这些应用程序需要通过 puppet 进行部署 请您告知这是否可能 问候 巴拉 您可以通过 pm2 将相同的 Nodejs 应用程序作为集群运行 https github
  • JsonPatchDocument 到复杂的实体框架跟踪对象上

    我正在尝试使用 Json 补丁来更新存储在实体框架数据上下文中的实体 我有像这样的实体类 public class Customer public Guid Id get set public string Name get set pub
  • application:openURL:options: 打开通用链接后未调用

    我已经使用 Branch SDK 设置了通用链接 这些链接可以正确打开应用程序 并且application continueUserActivity restorationHandler 被调用 但不是 application openUR
  • 如何从asp.net core 1.1项目生成类图

    我收到这个错误 打开 classdiagram cd 文件时 https i stack imgur com OKIyH png 使用以下命令手动创建 classdiagram cd 文件
  • iText 7 - HTML 到 PDF 写入 MemoryStream 而不是文件

    我正在使用 iText 7 特别是HtmlConverter ConvertToDocument方法 将 HTML 转换为 PDF 问题是 我真的不想在我的服务器上创建 PDF 文件 我宁愿在内存中完成所有操作 然后将其发送到用户浏览器 以
  • 如何自定义和验证 Google 文档表单(更简单的方法?)

    我一直在寻找一种自定义和验证 Google 表单的方法 最后我的演示页面上线并且完美运行 我还创建了有关如何自定义和验证的分步教程 但所有这些过程都花费了大量时间在 google stackoverflow 上搜索解决方案和代码片段 所以我
  • 为什么不需要“global”关键字来访问全局变量?

    根据我的理解 Python 有一个单独的函数命名空间 所以如果我想在函数中使用全局变量 我可能应该使用global 但是 即使没有 我也能够访问全局变量global gt gt gt sub 0 0 0 0 gt gt gt def get