这篇文章主要介绍了图解python全局变量与局部变量相关知识,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
了解全局变量和局部变量之前,我们先来了解一下作用域
a = 10 def func(): b = 20 def inner(): c = 30
以上面这个程序为例:打印a,b,c
可以看到只有a打印 10 ,b和c都报错,这就是作用域的问题。
我们把新创建的一个.py文件看做事一个模块,在模块内定义的变量,如a,就是这个模块的全局变量,作用于全局,不论在哪都可以调用,
但是b和c 是定义在函数内部的,我们叫做局部变量,只能作用在函数内部。
我们在看一个问题
func和inner函数可以调用变量a 么?
func函数可以调用变量c么?
答案是:a是全局变量,可以在任意地方调用
但是func函数不可以调用c,这时候我们把func看做一个整体,那么inner就是在func内部定义的函数,c也就是inner内部的变量
总结:变量定义在全局可以在任何地方调用,定义在函数内部,只能在函数内使用。
变量查找顺序:LEGB
局部作用域>外层作用域>当前模块中全局>python内置作用域;
在来说关于全局和局部变量的两个两个方法:global,nonlocal。
直接上例子吧:
我们可以看到,局部定义了a, 那么我们直接调用a就会报错,
只有在定义后调用才会打印,并且全局变量的a值不会改变
如果我现在想在局部名称空间改变a的值该怎么做呢?这时候就要用到global了
我们可以看到,全局变量a的值已经修改成15了。
下面来说nonlocal:
我们看到这时候打印a、b的时候出错了,错误提示是没有定义b
但是a没有报错,这是因为a是全局变量,而b是局部变量,所以出现了这种错误,改正如下:
因为b是局部变量,所以调用之前用nonlocal声明,之后就可以调用了。
名称空间
名称空间分类
全局命名空间( Global):每个模块加载执行时创建的,记录了模块中定义的变量,包括模块中定义的函数、类、其他导入的模块、模块级的变量与常量。
局部命名空间(Local):每个函数所拥有的命名空间,记录了函数中定义的所有变量,包括函数的入参、内部定义的局部变量。
内置命名空间(Built-in):任何模块均可以访问,放着内置的函数和异常(比如:input,print,str,list,tuple...)。
名称空间的加载顺序
内置命名空间(程序运行前加载) 一> 全局命名空间(程序运行中:从上到下加载) 一> 局部命名空间(程序运行中:调用时才加载)
名称空间的取值顺序
在局部调用:局部命名空间 一> 全局命名空间 一> 内置命名空间
在全局调用:全局命名空间 一> 内置命名空间
综上所述,在寻找变量时,从小范围,一层一层到大范围去找寻。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
python,全局,局部,变量
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。