全局变量和局部变量

简单的给大家一下全局变量和局部变量以及和他们相关的两个语句,之所以讲这个主要还是有些比较容易混淆的地方。

简单的说下概念:

局部变量:定义在函数内部的变量(包含函数参数)

全局变量:定义在函数外部,模块内部的变量

可以对比下图:

上图分别对应的v输出不同,下图局部变量被注释掉,就会找到全局变量进行赋值。

下图注释掉全局变量,不影响局部变量,但是外部不会找到局部变量:会出现Nameerror报错,说‘V’没有定义。

相信上面三张图应该大致理解全局变量和局部变量的引用关系了。

局部变量是在某个函数中声明的,只能在该函数中调用它,如果试图在超出范围的地方调用,那肯定会报错呀

我是为了举例子才用了相同的局部变量和全局变量名,实际中最好要区别开,因为有的时候,你也许在没有报错的情况下,得到一个完全意外的结果!

Python的4个作用域:

其实作用域的描述网上还是比较全面的,我这里简单说一下理解方面的:

局部作用域(函数内):简称 L

外部嵌套函数作用域 :简称E

函数定义所在模块(文件)的作用域 :简称G

Python内置模块的作用域:简称B

他们的查询规则:

L-->E-->G-->B

我的理解是(当然是目前阶段的便于理解,其实并不准确):L便是上面提到的局部变量,而E则是函数嵌套函数时才存在的上一层的变量区域,G则是全局变量的区域,B则是内置模块的。

global语句:

从字面意思就能看出来是声明变量的作用域的语句,官方定义:申明一个或者多个变量的作用域为模块级的作用域,也称全局变量。

上图可以和第一幅图进行比较会发现,当声明了全局变量之后,很明显可以修改全局变量了。(图中的红色数字为执行顺序,不在程序内)

nonlocal语句:

声明不是局部变量,也不是全局变量。就是在嵌套函数时,声明他是外一层的变量。这个就比较好理解了,定义的上一级

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180520G1DO2D00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

同媒体快讯

扫码关注腾讯云开发者

领取腾讯云代金券