zoukankan      html  css  js  c++  java
  • 第5.4节 Python函数中的变量及作用域

    一、函数中的变量使用规则

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

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

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

    global 全局变量名

    然后象使用局部变量一样该变量。

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

    #函数定义
    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、g1、l是同一个对象,用is判断返回为True,但l1则不同。
    

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

    三、nonlocal变量

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

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

  • 相关阅读:
    mysql免安装使用(win7 64位系统)
    [NOIP2011]瑞士轮
    [NOIP2011]数的划分
    [洛谷2994]超级弹珠
    并查集
    [codevs1073]家族
    快速幂
    [NOI2002]银河英雄传说
    [NOIP2007]矩阵取数游戏
    [洛谷2415]集合求和
  • 原文地址:https://www.cnblogs.com/LaoYuanPython/p/11087720.html
Copyright © 2011-2022 走看看