搜索
首页科技周边人工智能Python名称空间和可变范围的综合指南

介绍

了解Python函数中变量的名称空间,范围和行为对于有效编写和避免运行时错误或异常至关重要。在本文中,我们将深入研究名称空间和Python变量范围的各个方面,并了解Python如何详细管理本地,全局和封闭变量。

我们已经详细讨论了Python的功能,可以建立。 Python使用抽象原理隐藏复杂的逻辑并仅公开必要的输出,分解产生模块化,可读和可重复使用的功能。

这些原理足够明显,可以理解Python如何处理其可变范围用于函数定义和嵌套功能,我们将通过详细的示例探索。到本文结尾,您应该清楚地了解这些概念以及如何在程序中有效地应用它们。

Python名称空间和可变范围的综合指南

概述

  • Python的命名空间和可变范围对于有效的预防编码和误差至关重要。
  • 本文探讨了python中的本地,全局和封闭变量的行为。
  • LEGB规则描述了Python在不同范围内的变量名称搜索。
  • 实际示例证明了全球和局部变量的使用和修改。
  • 涵盖了嵌套功能和封闭范围,强调了非本地关键字。

目录

  • Python中有什么变量?
    • 全局变量
    • 本地变量
  • 命名空间是什么?
  • Python中有哪些可变范围?
  • LEGB规则是什么?
  • Python可变范围如何?
    • 1。在本地范围中使用全局变量
    • 2.在本地范围中使用本地变量
    • 3。修改本地范围内的全局变量
    • 4.使用声明对本地范围内部内部变量进行修改
    • 5。使用功能修改全局变量inside本地范围
  • 什么是嵌套功能?
  • 变量的封闭范围是什么?
    • 7.修改封闭范围内无声明的全局变量
    • 8。使用声明在本地范围内修改嵌套变量
  • 常见问题

Python中有什么变量?

Python中的变量是存储数据或值(例如INT,Float,Str,Bool等)的容器。存储变量且也可以访问的内存位置称为变量的theScope。

Python中有两种类型的变量,即:

全局变量

  • 这些变量属于主要程序的范围。
  • 主程序不能使用本地变量,因为它仅适用于函数。

本地变量

  • 这些变量属于功能范围。
  • 同样,当未在本地范围内定义本地变量时,本地变量可以使用函数内部的全局变量。

另请阅读:Python中的可变与不变的物体

命名空间是什么?

Python名称空间是Aspace或字典,将标识符(通常称为变量名称)作为其键及其各自对象作为内存空间中的值。 Python编程语言具有44种类型的名称空间,即:

  • 内置名称空间
  • 全局名称空间
  • 封闭名称空间
  • 本地名称空间

我们很快将研究不同的示例,以更好地理解这个概念。但是在此之前,了解上面提到的可变范围确实很重要。

Python中有哪些可变范围?

在Python中,范围是指直接访问变量的程序区域或文本区域。在执行过程中的任何时候,都有:

  • 本地范围:这是函数内定义的最内在范围。对于此范围,Python寻找局部变量。
  • 封闭范围:这些是嵌套函数的范围。它们包含既不局部也不全球的非本地变量。
  • 全局范围:此范围包含在模块级别定义的变量,并且可以在整个模块中访问。

注意:您在程序中创建这些用户定义的范围以有效地运行它。但是,Python的内置变量也具有称为内置范围的范围。

  • 内置范围:这是Python提供的所有预定义关键字或方法的范围。因此,一旦Python解释器启动,这些都可以为您提供。另外,请注意,这些范围永远不会被删除,并且可以在整个模块中访问。

LEGB规则是什么?

现在,您对命名空间和可变范围有基本的了解。让我们更深入地了解如何用Python编程语言应用范围。有一个常见的缩写,legb规则,它可以实现广阔的,封闭的,全球和建筑物。

LEGB规则指出,解释器可以从内而外搜索标识符,这意味着它首先在本地范围中寻找可变名称或名称空间开始。如果在那里没有名称空间,它将朝着程序的封闭范围迈进。 Ext,它检查全局范围以找到名称空间。最后,如果仍未找到标识符,解释器会查看Python提供的内置范围。

Python名称空间和可变范围的综合指南

此外,如果解释器在这些位置的任何一个中都找不到名称,则Python提出了“ nameError”异常,这意味着该变量在程序中未定义。

同样,要记住,您必须从当前范围的LEGB规则的层次结构上向上移动

另请阅读:高级Python编程的综合指南

Python可变范围如何?

现在,让我们从所有这些示例中进行一对一的了解,以深入了解所有这些概念:

1。在本地范围中使用全局变量

为了理解这一点,让我们以一个例子为例,这里的函数` g(y) `不仅打印了全局变量` x```x ',还将其修改为` x 1 '。

现在,由于在g(y)'中未定义X` ,因此python获取了全局变量` x '的值。

 def g(y):
  打印(x)
  打印(x 1)

#由于x不在本地范围中
x = 1
g(x)#全局本地变量
打印(x)#全局变量

输出

1<br><br> 2<br><br> 1

输出显示了“ x ”和“ x 1 ”的值确认全局变量X`保持不变,但本地范围已使用它来正确输出结果。

2.在本地范围中使用本地变量

现在,查看此示例,在这里我们有一个函数定义` g(y) ```g( y )```g'g'g',name x`定义为局部变量,也修改了。

 def g(y):
  x = 10#本地变量
  x = 1
  打印(x)


x = 1#全局变量
g(x)
打印(x)

输出

11<br><br> 1

作为证据,全局“ X ”保持不变,局部变量使用其局部范围变量来打印陈述,如预期的那样,通过函数通过函数将11作为输出和1个输出,如所预期的。

另请阅读:Python内置数据结构的综合指南

3。修改本地范围内的全局变量

但是,是否可以在不将其声明为`` global ''的情况下修改全局变量'?

答案是否!您不能从本地范围修改任何全局变量值,因为这样做将导致错误。

 def h(y):

  #功能可以使用全局变量,如果没有任何
  x = 10#,但无法更改本地变量内的全局值

x = 1
H(x)
打印(x)

输出

Unboundlocalerror Trackback(最近的最新电话)<br><br> <ipython-input-3-130c677cc9ab>在<cell line>()<br><br> 3<br><br> 4 x = 1<br><br> ----> 5 h(x)<br><br> 6印刷(x)<br><br> <ipython-input-3-130c677cc9ab>在h(y)中<br><br> 1def H(y):<br><br> -----> 2 x = 10<br><br> 3<br><br> 4 x = 1<br><br> 5 h(x)</ipython-input-3-130c677cc9ab></cell></ipython-input-3-130c677cc9ab>

unboundlocalerror:分配前引用的本地变量

这会导致`` unbounlocalerror '',因为由于分配操作,python将x视为局部变量,但尚未在本地初始化。另外,尽管本地变量可以访问全局变量,但您无法更改全局变量(您只能读取,而不是写)。

另请阅读:初学者Python编程的基本面

4。使用声明修改本地范围内部的全局变量

但是,由于我一直告诉您Python实际上是一种甜美的语言,即使不建议对全局变量进行任何修改或更改。这并不意味着Python并不能给您这个功能,因为使用相同的关键字将`X'称为“ global”,该函数可以修改全局变量`x` x'。

 def h(y):
  全局x#现在可以更改本地变量内的全局值
  #但是,这不是编码的好方法,您应该专注于减少此全局关键字用法
  x = 10

x = 1
H(x)
打印(x)

输出

11

输出确认X`已在全球更新。但是,请记住,更改将影响整个程序,因为修改主函数也会影响其他功能,这不是很好的编程实践。

5。使用功能修改全局变量inside本地范围

另外,您可以通过将x x添加到10中来修改函数内的全局变量它将打印新值并返回。

注意:这并不意味着您正在修改全局变量本身,无论如何,如果没有``global''关键字。

 def g(x):
  x = 10
  打印(“在f(x)中:x =”,x)
  返回x#返回f(x)

x = 2
z = g(x)
打印(“在主要程序范围:z =”,z)
打印(“在主要程序范围:x =”,x)

输出

在f(x)中:x = 12<br><br>在主要程序范围中:z = 12<br><br>在主要程序范围中:x = 2

在这里,全局X`保持不变,而返回的值` z`是新的更新值。

什么是嵌套功能?

在另一个` def`函数中定义的函数称为嵌套函数内部函数

这是一个嵌套功能的示例,可以更好地理解:

 def f():
  def g():
    打印(“内部功能g”)
  g()
  打印(“内部功能F”)

F()

输出

内部功能g<br><br>内部功能f

注意:嵌套函数`` g`在函数`` f ''中调用,从两个函数中打印消息。呼叫函数`` g'f'f'flresults以外的错误,因为在全局范围中未定义`` g '。

 g()#此功能未在函数f之外定义

输出

TypeError Trackback(最近的最新通话)<br><br> <ipython-input-8-5fd69ddb5074>在<cell>()<br><br> -----> 1 g()<br><br> typeError:g()缺少1所需的位置参数:'x'</cell></ipython-input-8-5fd69ddb5074>

变量的封闭范围是什么?

Python仅与嵌套函数中定义的名称(称为封闭范围)提供了不同的特殊变量范围。它也被称为非本地范围。当存在局部函数时,封闭范围是外部函数的范围,该函数是内部或嵌套函数。

 def f():
  x = 1
  def g():
    打印(“内部功能g”)
    打印(x)
  g()
  打印(“内部功能F”)
  
F()

此变量`x`都存在在封闭范围内,您也可以在本地范围中使用,如上所述。这就是IT输出:

输出

内部功能g<br><br> 1<br><br>内部功能f

现在,让我们继续前进,更好地理解这个新范围。

7.修改封闭范围内无声明的全局变量

同样,在嵌套函数内修改全局变量`是不可能的

 def g(x):
  def H():
    x = 1
    打印('in H(x):x =',x)
  x = x 1
  打印('in g(x):x =',x)
  H(x)
  返回x

x = 3
z = g(x)
打印('在主要程序范围:x =',x)
打印('在主要程序范围:z =',z)

输出

在g(x)中:x = 4<br><br> ----------------------------------------------------------------------------------------------------------------------------<br> TypeError Trackback(最近的最新通话)<br><br> <ipython-input-12-5bcfb2edb396>在<cell line>()<br><br> 9<br><br> 10 x = 3<br><br> ---> 11 z = g(x)<br><br> 12打印('在主要程序范围:x =',x)<br><br> 13打印('在主要程序范围:z =',z)<br><br> <ipython-input-12-5bcfb2edb396>在G(x)中<br><br> 5 x = x 1<br><br> 6打印('in g(x):x =',x)<br><br> ----> 7 h(x)<br><br> 8返回x<br><br> 9<br><br> TypeError:g。<locals> .h()获得0个位置参数,但给出了1个</locals></ipython-input-12-5bcfb2edb396></cell></ipython-input-12-5bcfb2edb396>

当函数` h() `时,无需任何参数而定义,但是`h(x)`被称为参数。此外,这将给出一个“ typeError”。尽管封闭变量可以访问全局变量,但您无法在全局变量中执行更改。

8。使用声明在本地范围内修改嵌套变量

与“全局”关键字相似,Python为开发人员提供了“非局部”关键字。这允许嵌套函数` h` h`可以修改封闭函数中定义的变量x

 def g(x):
  def H():
    非局部x#告诉h()使用x(x)的x
    x = 1
    打印('in H(x):x =',x)
  x = x 1
  打印('in g(x):x =',x)
  h()#呼叫h()没有任何参数
  返回x

x = 3
z = g(x)
打印('在主要程序范围:x =',x)
打印('在主要程序范围:z =',z)

输出

在g(x)中:x = 4<br><br>在h(x)中:x = 5<br><br>在主要程序范围中:x = 3<br><br>在主要程序范围:z = 5

输出显示在两个函数中所做的更改,并且全局变量` `X '保持不变。

最后,请注意,根据范围定义的位置,每个范围对应于整个程序中的不同级别访问级别,并且在代码中将具有不同的命名空间寿命。

另请阅读:从头开始学习数据科学的完整的Python教程

结论

本文探讨了Python如何处理本地和全局变量以及嵌套功能。我们了解到,命名空间是Python为开发人员提供的词典,您可以从中找到一个可变名称及其值存储在Python内存范围中的值。此外,这些范围分为四种:本地,封闭,全局和内置。

这些对于避免命名冲突和跟踪哪些名称/标识符是指整个程序不同部分中的哪些对象非常有用。

另外,如果要从本地范围中修改全局范围中的变量,则可以使用` global '关键字。同样,您可以使用“非局部”关键字来关闭范围。

  1. 本地范围:在函数内创建的变量,仅在该函数内访问,并在函数返回或提出任何异常时被删除,即,在编写函数时未处理。
  2. 封闭或非本地范围:在嵌套函数的外部功能中创建的变量,可供内部函数访问。
  3. 全局范围:在' __ -Main __程序中创建的变量,可以在整个程序中访问,最后直到解释器结束。

我希望这可以帮助您获得撰写良好生产级代码的见解,同时遵循与行业相关的最佳实践并减少开发人员定义的例外。但是,这是使我们的程序更加强大的第一步,我们还有更多涵盖。

因此,请继续关注下一篇文章,我们将在其中讨论Python编程语言中的文件序列化和避免!

常见问题

Q1。 Python的名称空间是什么?

Ans。 Python中的名称空间组织和管理程序中的名称或标识符。基本上,它们的作用就像存储映射到其对象的名称的容器或词典一样,例如变量和函数。

Q2。 Python中的LEGB规则是什么?

Ans。 Python中的LegB规则是Python解释器在使用名称或通常称为标识符时抬起头来的顺序。它代表本地,封闭,全球和内置:
1。本地:函数中定义的名称。
2。封闭:任何封闭功能的本地范围(嵌套函数)中的名称。
3。全局:在脚本或模块的顶层定义的名称。
内置:在Python中预定的名称,例如`` print '''或` Len '。

Q3。 python中`global'关键字的用途是什么?

Ans。全局关键字允许函数修改全局范围中定义的变量,并使变量能够驻留在操作之外。注意:仅仅因为您可以做到这一点,并不意味着您应该(经常)使用它,因为这不是一个好的编程实践。

Q4。为什么建议最大程度地减少全局变量的使用?

Ans。过度使用全球变量可能会导致难以理解和维护的程序。这也可能导致意外变化,从而使调试变得更加困难。通常最好使用本地变量并根据需要传递它们。

Q5。嵌套函数中`非局部`关键字的用途是什么?

Ans。与全局关键字相似,Python提供了“非局部”关键字来修改封闭变量。非本地关键字可以修改嵌套函数的封闭函数中定义的变量,从而提供了一种控制嵌套函数中变量范围的方法。

以上是Python名称空间和可变范围的综合指南的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
随着AI的使用飙升,公司从SEO转移到GEO随着AI的使用飙升,公司从SEO转移到GEOMay 05, 2025 am 11:09 AM

随着AI应用的爆炸式增长,企业正从传统的搜索引擎优化(SEO)转向生成式引擎优化(GEO)。 谷歌正引领这一转变。其“AI概述”功能已服务于超过十亿用户,在用户点击链接之前提供完整的答案。[^2] 其他参与者也在迅速崛起。ChatGPT、微软Copilot和Perplexity正在创造一种全新的“答案引擎”类别,完全绕过了传统的搜索结果。 如果您的企业没有出现在这些AI生成的答案中,潜在客户可能永远不会发现您——即使您在传统的搜索结果中排名靠前。 从SEO到GEO——这究竟意味着什么? 几十年来

大量赌注这些途径将推动当今的AI成为珍贵的AGI大量赌注这些途径将推动当今的AI成为珍贵的AGIMay 05, 2025 am 11:08 AM

让我们探索人工通用智能(AGI)的潜在途径。 该分析是我正在进行的《福布斯》列的AI进步的一部分,并深入研究了实现AGI和人工超智慧(ASI)的复杂性。 (请参阅相关艺术

您是训练聊天机器人,反之亦然吗?您是训练聊天机器人,反之亦然吗?May 05, 2025 am 11:07 AM

人机互动:一场互适应的微妙舞蹈 与AI聊天机器人互动,如同参与一场微妙的相互影响的舞蹈。你的提问、回应和偏好逐渐塑造着系统,使其更好地满足你的需求。现代语言模型通过显式反馈机制和隐式模式识别来适应用户的偏好。它们学习你的沟通风格,记住你的偏好,并逐渐调整其回应以符合你的预期。 然而,在我们训练数字伙伴的同时,同样重要的事情也在反向发生。我们与这些系统的互动正在微妙地重塑我们自身的沟通模式、思维过程,甚至对人际对话的期望。 我们与AI系统的互动已经开始重塑我们对人际互动的期望。我们适应了即时回应、

加利福尼亚攻击AI到快速赛道野火恢复许可证加利福尼亚攻击AI到快速赛道野火恢复许可证May 04, 2025 am 11:10 AM

AI简化了野火恢复允许 澳大利亚科技公司Archistar的AI软件利用机器学习和计算机视觉,可以自动评估建筑计划,以遵守当地法规。这种验证前具有重要意义

美国可以从爱沙尼亚AI驱动的数字政府中学到什么美国可以从爱沙尼亚AI驱动的数字政府中学到什么May 04, 2025 am 11:09 AM

爱沙尼亚的数字政府:美国的典范? 美国在官僚主义的效率低下方面挣扎,但爱沙尼亚提供了令人信服的选择。 这个小国拥有由AI支持的近100%数字化的,以公民为中心的政府。 这不是

通过生成AI的婚礼计划通过生成AI的婚礼计划May 04, 2025 am 11:08 AM

计划婚礼是一项艰巨的任务,即使是最有条理的夫妇,也常常压倒了婚礼。 本文是关于AI影响的持续福布斯系列的一部分(请参阅此处的链接),探讨了生成AI如何彻底改变婚礼计划。 婚礼上

什么是数字防御AI代理?什么是数字防御AI代理?May 04, 2025 am 11:07 AM

企业越来越多地利用AI代理商进行销售,而政府则将其用于各种既定任务。 但是,消费者倡导强调个人需要拥有自己的AI代理人作为对经常定位的辩护的必要性

商业领袖生成引擎优化指南(GEO)商业领袖生成引擎优化指南(GEO)May 03, 2025 am 11:14 AM

Google正在领导这一转变。它的“ AI概述”功能已经为10亿用户提供服务,在任何人单击链接之前提供完整的答案。[^2] 其他球员也正在迅速获得地面。 Chatgpt,Microsoft Copilot和PE

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

功能强大的PHP集成开发环境