第5.4节 Python函数中的变量及做用域

1、函数中的变量使用规则程序员

  1. 函数执行时,使用的全局空间是调用方的全局空间,参数及函数使用的局部变量存储在函数单独的局部名字空间内;
  2. 函数的形参在函数中修改了值时,并不影响调用方自己的数据,但若是形参是一个可变类型的容器,在函数中修改了容器中的元素,则该修改会影响到调用方的数据;
  3. 函数中的变量,既可使用局部变量(本地名字空间的变量),也可使用全局变量(全局名字空间的变量),函数在执行查找变量只读时,先在局部变量中查找,找不到再查到全局变量中查找。所以当局部变量和全局变量中有相同名字的变量时,函数使用的就是局部变量,只有当局部变量没有对应变量才会使用全局变量。通常状况下,函数只应该操做局部变量,不操做全局变量,只有特殊状况下才访问全局变量;
  4. 在函数内部给变量赋值且该赋值表达式中包含该变量(如x=x+1)时,该变量默认为局部变量,除非你明确地告诉Python它是全局变量或非局部变量,若是函数中没有定义要使用的变量为局部变量,又没有进行全局变量或非局部变量的声明,则Python会认为函数没有对应变量的定义和赋值,因此报错。

2、函数中对全局变量赋值的方法函数

一、使用global声明变量为全局变量,就是在使用前,使用语法:学习

global 全局变量名spa

而后象使用局部变量同样该变量。.net

二、对全局空间的字典键-值访问方式直接操做全局变量,使用前先经过globals()函数获取全局名字空间,再经过字典的键-值方式访问。举例:code

#函数定义
def f(x):
	g,l=globals(),locals() #取函数的全局空间和局部空间
	g['x']=x*100  #修改全局空间变量x的值为局部变量x的值*100
	     return g,l
	   #调用方代码
	    x=1  #调用方x赋值
	    g1,l1=f(x)  #返回函数的全局空间g1和局部空间l1,执行后x变成了100
	    g,l=globals(),locals()  #取调用方的全局空间g和局部空间l
实际上g、g一、l是同一个对象,用is判断返回为True,但l1则不一样。

三、将该全局变量存放到一个相似如列表的容器中,而后将该容器做为形参传递给函数,在函数中对容器的元素直接赋值。对象

3、nonlocal变量blog

      函数中的变量除局部变量和全局变量外,还有一种变量为非本地变量,使用nonlocal来进行声明,但nonlocal关键字只能用于嵌套函数中,而且外层函数中定义了相应的局部变量,不然会发生错误。在此只是简单引出,使用也比较简单,不进行详细介绍。get

 

    老猿Python(https://blog.csdn.net/LaoYuanPython)系列文章用于逐步介绍老猿学习Python后总结的学习经验,这些经验有助于没有接触过Python的程序员能够很容易地进入Python的世界。class