python中全局变量中“+=”和“+”的区分

python中全局变量的使用

在引入全局变量的概念之前先说一下python的数据类型,python的数据类型分为两种分别是:数字型和非数字型:

数字型:

1.整型(int,注意:python2中整型分为长整型和整型,但是在Python3中都是整型)

2.布尔类型(bool,只有真假二只,True和False,需要注意的是首字母要大些, True和False为关键字)

3.浮点型(float)

4.复数型(complex)

非数字型:

1.列表(list,空列表的定义方式有两种,list_ = list(),或者list=[ ]),

2.元组(tuple,空元组的定义方式也有两种.t = ()或者t = tuple()还需要注意的一点是如果元组中只有一个元素,元素后需要添加,例如t = (1,))

3.字典(dict,空字典只能使用dict= {}定义,字典有键和值,键是索引,必须是唯一且不可变数据类型,值可以是任何数据类型,键和值之间使用冒号:分隔)

4.字符串(str,需要注意的是字符串用双引号””区分,单引号也可以使用’’)

介绍了python中数据类型的后对这八种数据类型有一个可变以及不可变的区分,列表(list)以及字典(dict)为可变类型,数字型(int,float,complex,bool),字符串(str),元组(tuple)为不可变类型

介绍完python的数据类型就需要引入全局变量以及局部变量的概念了:

局部变量 是在函数内部定义的变量,只能在函数内部使用

在函数执行结束后,函数内部的局部变量,会被系统回收,不同的函数,可以定义相同的名字的局部变量,但是彼此之间不会产生影响。

全局变量 是在函数外部定义 的变量(没有定义在某一个函数内),所有函数内部都可以使用这个变量


--------------------------------------------------------这里是分割线----------------------------------------------------------

在python中“a += 1”相等于“a = a + 1”,列表中也可以使用“+”以及“+=”方法,“+=”是不会改变引用。

在一个函数中对全局变量进行修改的时候,是否需要使用global进行说明,要看是否对全局变量的执行指向进行了修改.

如果修改了执行,即让全局变量指向了一个新的地方,那么必须使用global,如果仅仅是修改了指向的空间中的数据,此时不用必须使用global

但是在执行某些代码的时候我们会出现一些问题,以下是一段代码:

python中全局变量中“+=”和“+”的区分

这是这段代码生成的结果:

python中全局变量中“+=”和“+”的区分

这是这段代码函数调用位置不同的代码:

python中全局变量中“+=”和“+”的区分

这是结果:

python中全局变量中“+=”和“+”的区分

根据分析我们可以判断出来在使用"+="方法的时候并不会改变执行的,也就是说并不改变引用,但是此处为什么要使用global我的猜测是python解释器在识别到"="的时候默认其是一个赋值语句,使用两个相同的变量名,因此给等号右边的数据开辟了新的指向空间.在我work2()函数中,若是将"g_num = g_num + [1,2,3]"改为"new_num = g_num + [1,2,3]"就不需要用global进行声明.因为g_num 是一个列表是可变类型数据,我再次猜想是不是因为可变才导致的这个原因,我又使用了整型数据来验证这个猜想,结果与使用列表的无异,验证"+="并不会改变引用.python是高级语言,底层的实现不用过于深究,只要注意在使用全局变量的时候用global声明就好了.

附上:

代码:

python中全局变量中“+=”和“+”的区分

结果:

python中全局变量中“+=”和“+”的区分