python中的作用域以及global的用法

转载于此处

python中一个变量的作用域总是由在代码中被赋值的地方所决定的。

    函数定义了本地作用域,而模块定义的是全局作用域。如果想要在函数中定义全局作用域则需要加上global修饰符。

当在函数中引用未认证的变量名时,Python搜索的4个作用域,1,本地作用域,函数内部声明但没有使用global的变量。

2,上一层结构中def或者lambda的本地作用域,之后是全局作用域,最后是在python的内置类和函数中查找,并会在第一处找到这个变量名的地方停下来,如果最后python没有找到那么就会提示报错。


关于global修饰的用法:

首先是python中的一个奇异现象,在模块层面定义的变量,按理就是全局变量,在整个模块任意处都可以调用的,可以在函数中当做全局变量使用:

a = 6
def A():
   print(a)
A()
print(a)

上面代码都可以正常运行,且输出都为6

但是如果在函数中有再赋值/定义(因为python是弱类型语言,赋值语句和定义语句一样),则会产生未定义变量的错误,如下


运行会抛出:UnboundLocalError: local variable 'a' referenced before assignment

而如果在函数中的定义在引用前使用,那么会正常运行,但函数中的变量和模块中的定义的全局变量不为同一个


输出为12和4, h函数中使用的是局部变量a,最后的print使用的是全局变量a


那么我们会有疑问,如果我想在函数使用莫伊变量后再对其进行修改,怎么让函数中使用的变量是模块层定义的那个全局变量而不是函数内部的局部变量呢?这里就可以用到global修饰符了。

在用global修饰声明后的a就是全局变量,最后上面代码输出的是4和12



 

猜你喜欢

转载自blog.csdn.net/rongdang/article/details/81045706