介绍
了解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提出了“ 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 '关键字。同样,您可以使用“非局部”关键字来关闭范围。
- 本地范围:在函数内创建的变量,仅在该函数内访问,并在函数返回或提出任何异常时被删除,即,在编写函数时未处理。
- 封闭或非本地范围:在嵌套函数的外部功能中创建的变量,可供内部函数访问。
- 全局范围:在' __ -Main __程序中创建的变量,可以在整个程序中访问,最后直到解释器结束。
我希望这可以帮助您获得撰写良好生产级代码的见解,同时遵循与行业相关的最佳实践并减少开发人员定义的例外。但是,这是使我们的程序更加强大的第一步,我们还有更多涵盖。
因此,请继续关注下一篇文章,我们将在其中讨论Python编程语言中的文件序列化和避免!
常见问题
Q1。 Python的名称空间是什么?Ans。 Python中的名称空间组织和管理程序中的名称或标识符。基本上,它们的作用就像存储映射到其对象的名称的容器或词典一样,例如变量和函数。
Q2。 Python中的LEGB规则是什么? Ans。 Python中的LegB规则是Python解释器在使用名称或通常称为标识符时抬起头来的顺序。它代表本地,封闭,全球和内置:
1。本地:函数中定义的名称。
2。封闭:任何封闭功能的本地范围(嵌套函数)中的名称。
3。全局:在脚本或模块的顶层定义的名称。
内置:在Python中预定的名称,例如`` print '''或` Len '。
Ans。全局关键字允许函数修改全局范围中定义的变量,并使变量能够驻留在操作之外。注意:仅仅因为您可以做到这一点,并不意味着您应该(经常)使用它,因为这不是一个好的编程实践。
Q4。为什么建议最大程度地减少全局变量的使用?Ans。过度使用全球变量可能会导致难以理解和维护的程序。这也可能导致意外变化,从而使调试变得更加困难。通常最好使用本地变量并根据需要传递它们。
Q5。嵌套函数中`非局部`关键字的用途是什么?Ans。与全局关键字相似,Python提供了“非局部”关键字来修改封闭变量。非本地关键字可以修改嵌套函数的封闭函数中定义的变量,从而提供了一种控制嵌套函数中变量范围的方法。
以上是Python名称空间和可变范围的综合指南的详细内容。更多信息请关注PHP中文网其他相关文章!

介绍 随着生成性AI继续将业务从内容创建重塑为自动化,学习这项技术对于有抱负的AI专业人士和爱好者都至关重要。凭借其巨大的教育

介绍 大型语言模型或LLM是改变游戏规则的人,尤其是在使用内容时。从支持摘要,翻译和一代,诸如GPT-4,Gemini和Llama之类的LLM使它变得简单

介绍 大型语言模型(LLM)代理是提高工作场所业务效率的最新创新。他们自动进行重复的活动,促进协作并在各个部门提供有用的见解。与众不同

想象一下自己是一个数据专业人士,负责创建有效的数据管道来简化流程并生成实时信息。听起来很具有挑战性,对吗?那就是法师AI的来源以确保贷款

介绍 文本到图像的综合和图像文本对比学习是最近越来越受欢迎的两个最具创新性的多模式学习应用程序。借助其创新的创意图像源

介绍 Excel对于提高所有领域的生产率和效率都是必不可少的。 YouTube上的广泛资源可以帮助各个级别的学习者找到针对他们需求的有用教程。这个AR

你听到了大新闻吗? Openai刚刚推出了一系列新型AI模型的预览 - OpenAi O1(也称为草莓/Q*)。这些模型很特别,因为它们花费更多的时间“思考”

介绍 在人工智能的快速变化领域中,两种语言模型Claude和Gemini已成为杰出的竞争者,每个语言都提供了不同的优势和技能。虽然这两种模型都可以法术


热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

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

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)