关于python全局变量和局部变量,以下选项描述错误,在python中,关于全局变量和局部变量
在了解全局变量和局部变量之前,我们先了解一下作用域。
a=10
deffunc():
b=20
定义者():
c=30
以上面的程序为例:打印a,B,c 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内置范围;
在本文中,关于全局变量和局部变量有两种方法:全局方法和非局部方法。
让我们直接举个例子:
我们可以看到a是局部定义的,所以如果直接调用a,就会报错。
只有在定义之后,调用才会被打印,全局变量的A值不会改变。
如果我现在想改变本地命名空间中a的值,该怎么办?这就是使用全局的时候。
我们可以看到全局变量A的值被修改为15。
再说说外地:
我们看到此时打印A和B时出现了错误,错误信息是B没有定义。
但是A没有报错。这是因为A是全局变量,B是局部变量,所以出现了这个错误。更正如下:
因为b是局部变量,所以在调用前用非局部声明,然后才能调用。
命名空间
名称空间分类
全局命名空间(Global Namespace):在每个模块加载和执行时创建,记录模块中定义的变量,包括模块中定义的函数和类、其他导入的模块、模块级变量和常量。
局部命名空间:每个函数拥有的命名空间,记录了函数中定义的所有变量,包括函数的参数和内部定义的局部变量。
内置命名空间:可以访问任何模块,内置函数和异常(如:input、print、str、list、tuple.).
命名空间的加载顺序
内置命名空间(程序运行前加载)、全局命名空间(程序运行时自顶向下加载)和局部命名空间(程序运行时加载)。
命名空间的值顺序
本地调用:本地命名空间-全局命名空间-内置命名空间
在全局调用中:全局名称空间-内置名称空间
总结一下,找变量的时候,从小范围找,一层一层往大范围找。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。