图解python全局变量与局部变量相关知识
这篇文章主要介绍了图解python全局变量与局部变量相关知识,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
了解全局变量和局部变量之前,我们先来了解一下作用域
a=10 deffunc(): b=20 definner(): c=30
以上面这个程序为例:打印a,b,c
我们把新创建的一个.py文件看做事一个模块,在模块内定义的变量,如a,就是这个模块的全局变量,作用于全局,不论在哪都可以调用,
但是b和c是定义在函数内部的,我们叫做局部变量,只能作用在函数内部。
我们在看一个问题
func和inner函数可以调用变量a么?
func函数可以调用变量c么?
答案是:a是全局变量,可以在任意地方调用
变量查找顺序:LEGB
局部作用域>外层作用域>当前模块中全局>python内置作用域;
在来说关于全局和局部变量的两个两个方法:global,nonlocal。
直接上例子吧:
但是a没有报错,这是因为a是全局变量,而b是局部变量,所以出现了这种错误,改正如下:
名称空间
名称空间分类
全局命名空间(Global):每个模块加载执行时创建的,记录了模块中定义的变量,包括模块中定义的函数、类、其他导入的模块、模块级的变量与常量。
局部命名空间(Local):每个函数所拥有的命名空间,记录了函数中定义的所有变量,包括函数的入参、内部定义的局部变量。
内置命名空间(Built-in):任何模块均可以访问,放着内置的函数和异常(比如:input,print,str,list,tuple...)。
名称空间的加载顺序
内置命名空间(程序运行前加载)一>全局命名空间(程序运行中:从上到下加载)一>局部命名空间(程序运行中:调用时才加载)
名称空间的取值顺序
在局部调用:局部命名空间一>全局命名空间一>内置命名空间
在全局调用:全局命名空间一>内置命名空间
综上所述,在寻找变量时,从小范围,一层一层到大范围去找寻。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。