首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么python认为定义为全局变量的变量是函数中的局部变量?

Python认为定义为全局变量的变量是函数中的局部变量,是因为Python在查找变量时遵循了一定的规则,即"LEGB"规则,即Local、Enclosing、Global和Built-in四个作用域。

当在函数内部定义一个变量时,Python首先会在函数内部的局部作用域中查找该变量。如果找到了,则认为该变量是局部变量,不会再继续向外层作用域查找。

如果在函数内部没有找到该变量,则会向外层的封闭作用域(Enclosing)中查找。如果找到了,则认为该变量是封闭作用域中的变量,不会再继续向外层作用域查找。

如果在封闭作用域中也没有找到该变量,则会继续向全局作用域(Global)中查找。如果找到了,则认为该变量是全局变量。

最后,如果在全局作用域中也没有找到该变量,则会继续向内置作用域(Built-in)中查找。内置作用域包含了Python内置的函数和对象。

因此,当在函数内部定义一个变量,并且没有使用global关键字声明该变量为全局变量时,Python会按照上述规则将其认为是函数中的局部变量。

这种设计有助于避免变量命名冲突和作用域混乱,同时也提供了更好的代码可读性和维护性。

推荐的腾讯云相关产品和产品介绍链接地址:

  • 腾讯云函数计算(云原生Serverless计算服务):https://cloud.tencent.com/product/scf
  • 腾讯云云数据库MySQL版(关系型数据库服务):https://cloud.tencent.com/product/cdb_mysql
  • 腾讯云对象存储COS(海量、安全、低成本的云端存储服务):https://cloud.tencent.com/product/cos
  • 腾讯云区块链服务(提供高效、安全、稳定的区块链解决方案):https://cloud.tencent.com/product/bcs
  • 腾讯云人工智能(提供丰富的AI能力和解决方案):https://cloud.tencent.com/product/ai
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

java全局变量局部变量区别_全局变量局部变量定义

大家好,又见面了,我你们朋友全栈君。 全局变量一个运行时刻实体,它在程序整个执行过程中都存在。全局变量生命周期程序开始到程序结束。...未初始化全局变量则不是可执行模块一部分,只有当定义它们程序被调用时(即执行时),才分配空间,声明或定义时并不分配。未初始化全局变量在运行时被初始化为0或null。...局部变量也叫自动变量,它声明在函数块内,作用范围也在函数快内,不能同一源文件其它函数使用,也不能其他文件函数使用,局部变量存储在栈。...无论局部变量显示初始化,或者未初始化,都只有当定义它们程序快被调用时(及执行时),才分配空间,声明或定义时并不分配,局部变量不是可执行每模块一部分!!...具体来说,全局变量局部变量区别如下: 作用域不同:全局变量作用域整个程序,而局部变量作用域当前函数或循环等 内存存储方式不同:全局变量存储在全局数据区局部变量存储在栈区 生命期不同

1.5K30
  • Python全局变量局部变量是什么?

    Python全局变量局部变量在作用域和访问权限上有明显区别。全局变量在整个程序可访问变量,而局部变量则仅在其被定义函数内部可用。1....}")在此示例,通过在函数内部使用 global 关键字,我们成功地修改了全局变量 global_var 30,并且这个修改持久,影响了整个程序。...下面一个示例:python 代码解读复制代码var = 10 # 全局变量def func(): var = 20 # 局部变量 print(f"在函数内部局部变量 var 值:{...使用 nonlocal 关键字修改嵌套函数变量Python,还存在一种嵌套函数情况,即在函数定义函数。这时,可以使用 nonlocal 关键字来修改外层函数局部变量。...总结总结全局变量局部变量Python区别至关重要。全局变量在整个程序可被访问,而局部变量仅在其定义函数内部可见。这种区别涉及作用域和访问权限,影响程序结构和灵活性。

    8210

    java局部变量全局变量哪个优先_java成员变量全局变量

    大家好,又见面了,我你们朋友全栈君。 Java变量 java主要有如下几种类型变量: 一、局部变量 只在特定过程或函数可以访问变量,被称为局部变量。...与局部变量相对应全局变量全局变量就是从定义位置起,作用域覆盖整个程序范围变量局部变量可以和全局变量重名,但是局部变量会屏蔽全局变量。...在函数内引用这个变量时,会用到同名局部变量,而不会用到全局变量。 一旦退出方法,构造函数或块变量将被销毁。 访问修饰符不能用于局部变量。...(这是局部变量和实例变量一大区别) 二、全局变量(成员变量) 其中实例变量、类变量、常量都是属于成员变量,成员变量又被称为全局变量 java类成员变量有俩种:一种被static...在语法定义区别:静态变量前要加static关键字,而实例变量前则不加。

    1.2K20

    PYTHON】论Python私有变量、共有变量全局变量局部变量

    如私有变量、共有变量全局变量局部变量等。这里给大家介绍Python类(class)变量之间区别。...1 变量说明  1.1 私有变量  私有变量,顾名思义,一个只能被当前类或者方法或者函数才能访问变量,其他类或者方法或者函数不能直接访问。这里说不能直接访问,也就是说可以通过间接方式访问。...,而在__init__()构造方法long变量也是可以被对象f直接引用,这就是说全局变量被当做类一个属性来存放,在Python。    ...上面的截图中,在类run()方法定义r变量一个局部变量,我们根本不可能调用它,因为它在run()方法运行完毕之后,属于它局部变量r)那一块内存空间就会被Python解释器给释放掉,所以Python...代码定义fly变量以及构造方法long变量都是全局变量,因为在long之前加了一个self前缀,所有在整个类,该long变量也是全局变量,至少在该类任何地方都可以访问到该变量

    4.2K20

    局部变量,静态局部变量全局变量,静态全局变量在内存存放区别(转)

    起始位置也是由连接定位文件所确定,大小在编译连接时自动分配,它和你程序大小没有关系,但和程序使用到全局变量,常量数量相关。  4、stack保存函数局部变量和参数。...局部变量,局部静态变量全局变量,全局静态变量区别: 局部变量:    栈区 局部静态变量:静态区 全局变量:    静态区常量区 全局静态变量:静态区 在进行C/C++编程时,需要程序员对内存了解比较精准...例如,声明在函数中一个局部变量 int b; 系统自动在栈b开辟空间  heap:  需要程序员自己申请,并指明大小,在cmalloc函数  如p1 = (char *)malloc(10); ...,然后函数局部变量。...注意静态变量不入栈。  当本次函数调用结束后,局部变量先出栈,然后参数,最后栈顶指针指向最开始存地址,也就是主函数下一条指令,程序由该点继续运行。

    4.7K80

    学习记录-Python局部变量全局变量

    1 定义在被调用函数内赋值变量局部变量在所有函数之外赋值变量全局变量当一个函数被调用时候,就会创建一个局部作用域,在这个函数所有变量都存在于该局部作用域内(global变量除外),该函数返回时...运行后显示,egg未被定义egg局部变量,而print(egg)变量egg全局变量,全局作用域中代码不能使用局部作用域中变量这一点我理解:在调用子函数spam()时,创建了一个局部作用域,...并在局部作用域中定义了一个局部变量,当子函数调用结束后,局部作用域和内部定义局部变量一起没销毁,因此在全局作用域中,找不到egg这个局部变量2.2 局部作用域中代码可以访问全局变量 def spam...两个子函数中都定义变量egg,但在打印时,互不影响3 全局变量局部变量同名在上面说到,可以在局部作用域中调用全局变量,并且在给出例子,我们函数只有一个print操作,但如果一个变量既在全局作用域中定义...通过使用global语句在局部作用域中声明了一个全局变量egg,当函数spam()调用结束后变量egg并未随之销毁5 全局变量局部变量优先级在上面的例子说过,如果在全局变量局部变量同名,那么局部作用域中会优先处理在当前作用域中声明变量用下面的例子进一步说明这个问题

    67320

    关于python全局变量局部变量一个问题

    参考链接: Python全局,局部和非局部变量 众所周知,全局变量局部变量可以说是泾渭分明,如 a = 10 def test(): a = 20 print(a) test() #将输出局部变量a...print(a) # 将输出全局变量a #答案: 20 10 函数内部局部变量a,并不会影响全局变量a 但是假设为列表或字典呢?...my_list) 答案函数 [20] [10] 仍然符合局部变量并不会影响全局变量 注意:假设为一个空列表或字典 my_list = [] def list_test(): my_list.append...(20) print(‘函数’,my_list) list_test() print(my_list) 答案:函数 [20] [20] 这里为何20,而不是[]?...个人见解:函数内部无my_list这个列表,因此他将会调用全局变量my_list列表,然后把元素放在了列表,改变全局变量,又或是因为容器? 望大佬们积极解惑,不胜感激

    66220

    CCPPstatic用法:全局变量局部变量

    C/C++ static 用法全局变量局部变量 什么static?  static C/C++很常用修饰符,它被用来控制变量存储方式和可见性。...1.1static引入 我们知道在函数内部定义变量,当程序执行到它定义处时,编译器它在栈上分配空间,函数在栈上分配空间在此函数执行结束时会释放掉,这样就产生了一个问题: 如果想将函数变量值保存至下一次调用时...最容易想到方法定义全局变量,但定义一个全局变量有许多缺点,最明显缺点破坏了此变量访问范围(使得在此函数定义变量,不只受此函数控制)。static关键字则可以很好解决这个问题。...静态变量与普通变量 静态全局变量有以下特点: (1)静态变量都在全局数据区分配内存,包括后面将要提到静态局部变量; (2)未经初始化静态全局变量会被程序自动初始化为0(在函数体内声明自动变量随机...(4)全局变量和全局静态变量区别 1)全局变量不显式用static修饰全局变量全局变量默认有外部链接性,作用域整个工程,在一个文件内定义全局变量,在另一个文件,通过extern 全局变量声明

    1.7K20

    【从零学习python 】28. Python局部变量全局变量

    局部变量 局部变量,就是在函数内部定义变量 其作用范围这个函数内部,即只能在这个函数中使用,在函数外部不能使用 因为其作用范围只是在自己函数内部,所以不同函数可以定义相同名字局部变量(打个比方...,把你、我当做成函数,把局部变量理解每个人手里手机,你可有个iPhone8,我当然也可以有个iPhone8了, 互不相关) 局部变量作用,为了临时保存数据需要在函数定义变量来进行存储 当函数调用时...,各自有自己小秘密在手机里,不让另外一方使用(可以理解局部变量);但是家里电话2个兄弟都可以随便使用(可以理解全局变量) # 定义全局变量 a = 100 def test1():...() 运行结果: 总结1: 在函数外边定义变量叫做全局变量 全局变量能够在所有的函数中进行访问 全局变量局部变量名字相同问题 看如下代码: 总结2: 当函数内出现局部变量全局变量相同名字时,函数内部...变量名 = 数据 此时理解定义了一个局部变量,而不是修改全局变量值 修改全局变量 函数中进行使用时可否进行修改呢?

    16110

    为什么局部变量线程安全

    最近看到一个问题,说是 局部变量线程安全?一开始我拒绝,因为在我意识里如果多个线程同时访问一个方法就一定为导致数据竞争,从而导致数据混乱。...于是我就开始验证我结论(在线打脸现场emm…) 为什么局部变量线程安全?...并操作add方法下变量,永远都不会导致数据竞争,为什么呢?...如何理解上面这句话: 结论 局部变量(方法内部私有变量线程安全,代码num这个私有变量线程安全,原因在new HasSelfPrevateNum()这个类时候它只会为类属性成员变量开辟空间...,而方法只在方法区开辟一个内存空间并且只存一份共用代码段(变量在堆区,引用在栈区),而方法私有变量不会先开辟出内存空间,而是等调用时在对应调用线程方法变量申请空间,所以有几个线程调用则每个线程就会在自己线程空间局部变量申请几个引用同时在堆变量再申请对应空间

    88150

    关于pythonlambda函数描述_Python全局变量

    提示:文章写完后,目录可以自动生成,如何生成可参考右边帮助文档 文章目录 前言 示例一、单个输入参数 示例二、多个输入参数 示例三、作为返回值返回 ---- 前言 `在python...可以使用Lambda表达式生成匿名函数,其语法格式: Lambda 参数:表达式 其中参数可以是一个或者多个,但只支持一个表达式 ---- 下面提供三种应用 示例: 示例一、单个输入参数 fun1...= lambda x: x+5; print(fun1(2)); 输出结果: 7 示例二、多个输入参数 fun2 = lambda x,y:x+y; print(fun2(5,9)); 输出结果...14 示例三、作为返回值返回 def fun3(n): return lambda x:x**n;#注意此处有return 将Lambda函数返回 M1 = fun3(5); print(M1...如发现本站有涉嫌侵权/违法违规内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    1.3K10

    Javascript局部变量全局变量详解与var、let使用区别

    JavaScript全局变量局部变量又是什么呢? 可以带着这两个问题往下看。 变量作用域 变量有作用域,大多数语言中变量作用域都有全局变量局部变量之分。...说明在函数体内用 var 关键字声明变量 test_var3 局部变量; 在函数体外使用 var 关键字定义变量test_var1 和在函数体内未用任何关键字定义变量 test_var2 全局变量...得出结论: 在函数体外使用var关键字定义变量和在函数体内未用任何关键字声明变量全局变量,在函数体内使用var关键字声明变量局部变量。...在函数体外定义全局变量test_var,但是在函数体内又定义局部变量test_var ,在函数中弹出test_var函数体内局部变量覆盖函数体外全局变量结果,当离开函数后,局部变量失效,...小结 本文介绍了JavaScript局部变量全局变量知识和var,let声明变量区别。给我们启示如果浏览器支持let关键字,那么就尽量用let来避免变量提升机制等情况。

    3.1K20

    Python全局变量操作

    今天遇到了Python全局变量相关操作,遇到了问题,所以,在这里将自己遇到问题,做个记录,以长记心!!!...在Python中使用全局变量,其实,个人认为并不是很明智选择;但是自己还是坚信,存在便合理,在于你怎么使用;全局变量降低了模块和函数之间通用性;所以,在以后编程过程,应尽量避免使用全局变量。...全局变量使用: 方法一: 为了便于代码管理,将全局变量统一放到一个模块,然后在使用全局变量时候,导入全局变量模块,通过这种方法来进行使用全局变量; 在一个模块定义全局变量: [python...if __name__ == '__main__':       printGlobal()   print(globalValues.GLOBAL_2)   方法二: 直接在模块定义全局变量...但是在使用全局变量时候,必须在函数中使用global关键字进行标识: [python] view plaincopyprint?

    3.1K20

    关于Python局部变量全局变量必须知道几句话

    虽然Python支持非常复杂变量作用域和访问顺序(详见:几行代码理解Python变量访问LEGB顺序、详解Python变量作用域),但是一般而言,能够分清局部变量全局变量基本上就够用了。...1、一个变量作用域指能够访问它代码范围。 2、函数形参变量作用域整个函数。 3、在函数定义变量被称作(隐式局部变量。...如果局部变量在一个代码块定义,那么它从定义位置开始到其所在函数结束代码中都是可以访问,并且在整个函数范围内,该变量都是局部变量,除非在函数开始使用global关键字进行声明。...4、函数内部for语句中循环变量(隐式局部变量,和其他局部变量一样,它作用域会被延伸到其所在函数结束,除非之前有global声明。 5、Python支持全局变量函数之外定义变量。...全局变量对于其定义位置之后定义所有函数都是可见、可读。然而,任何想修改全局变量函数都必须包含一个global声明。 6、应尽量避免使用全局变量

    75450

    es6let声明变量与es5var声明变量区别,局部变量全局变量

    (){console.log(i)},1000); } 由于var声明变量会声明提升var i 其实就是一个全局变量,console.log(i)里面的i也是全局变量,i在异步函数执行前已经变为了10...,console.log(i)里面的i局部变量,每次循环时输出都是一个局部变量,所以 结果就连续输出从0到9 let i; for(i=0;i<10;i++){ setTimeout(function...(i)})(i),i*1000); } (function(i){console.log(i)})(i)将全局变量传入方法里,变成了一个局部变量,然后console.log(i)就是一个局部变量 所以结果...0到9; 方法里面可以把方法当做参数传入,这时参数如果在()里面定义就是局部变量,在闭包里面有用; var a = function(){ console.log(11); } var b = function...var b = function(a){ a(); } b( var a=function (){ console.log(11); }); 报错在function()里面的值访问外部值,在这里面定义局部变量

    1.3K70
    领券