全局变量_变量、局部变量和全局变量

一、变量(variable)

在Python中,变量是表示(或指向)特定值的名称。

例如,我们可能想使用名称a来表示2,为此执行下列代码:

d6f0a1aec45ceac42fc56a8552ab90a0.png

这称为赋值(assignment),将值2赋给了变量a。也就是变量a与值(或对象)2关联起来。

给变量赋值后,就可以在表达式中使用它。例如:

3476ab64d4a9a2b1b726c3e77642e5c4.png

注意:在使用Python变量前,必须先给它赋值,而且,变量名称只能由字母、数字和下划线组成,并且不能以数字开头;

0d37480f17b6e8f31766f3872e0597bc.png

另外Python中的关键字和函数名不能作为变量名使用

a0857f9462f16945c1ddbce272a6844b.png

用关键字做变量名会报错,用函数名做变量名不会报错,但是一旦用函数名定义变量,函数将失去原来的函数作用,变成单纯的变量名称,这时候需要删除变量才能恢复函数名称原来的函数作用

acc7d143f32ed8aadd1cec5c2f0671c1.png

二、局部变量和全局变量

函数有两种连接变量的方式:全局和局部。这里的全局和局部是相对于单个的自定义函数而言的。全局变量的作用域(命名空间)是全局,而局部变量的作用域(命名空间)仅限于单个的自定义函数内部。

例:

c9759caf695ff0d6c2dbe6fdcb56aed6.png

变量a在函数test1内部进行的赋值,所以a的作用域仅限于test1函数内部,a为局部变量

局部作用域在函数被调用时生成,并立即由函数的参数填充,一般情况下,当函数执行结束后,局部作用域就会被注销。所以,局部变量a在test1函数退出时就被注销了,在函数外部调用a的时候会报错。

407fed0535b8d58eb4e8b3ee76dfa2ea.png

变量b在函数test2外部进行的赋值,所以b的作用域不仅限于test2内部,b为全局变量

那么,新的问题来了,如果在自定函数的时候,既有全局变量,又有局部变量,而且全局变量名称和局部变量名称相同,这种情况会产生什么样的结果呢?

7800b22e511d3e193fb65de37ea71972.png

局部变量和全局变量重名,如果函数内部有局部变量,函数调用的是自己内部的局部变量;如果函数内部没有定义局部变量,函数调用的是函数外部同名的全局变量。

三、修改全局变量

出现一个新的需求,能否在函数内部对全局变量进行修改?

通过global关键字在函数内部对全局变量进行修改

8af1be4aaa8e209f32054aeb1c434aa4.png

global关键字的本质作用是把局部变量转化成全局变量,在没有定义全局变量的情况下来看会更明显的显示global关键字的作用

3f8293eea4a32a7d4719a9da63e9817a.png

修改全局变量的一个陷阱

ddce173a2ffe22bebce5b4043ca2271c.png

表面上看没有通过global关键字就改变了全局变量,真实情况也是这样的吗?

其实并不是这样的!一开始对变量名称的定义就说明了,变量是指向了值,其本质是“值的一个引用”,而不是“变量的取值”。所以,上边代码图片虽然显示全局变量是从[1]变到了[1,1],实际上全局变量的指向并没有发生变化,能看到前后指向的ID是一样的!发生变化的原因在于定义的全局变量是可变的数据类型而已!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值