全局变量和局部变量

2019-04-14 17:44发布

全局变量和局部变量:
    
 局部变量:
   1. 定义在函数内部的变量称为局部变量(函数的形参也是局部变量)
   2. 局部变量只能在函数内部使用
   3. 局部变量在函数调用时才能够被创建,在函数调用之后会自动销毁
 全局变量:
   
    定义在函数外部, 模块内部的变量称为全局变量
    全局变量, 所有函数都可以直接访问(但函数内部不能直接修改全局变量的绑定关系)

示例: 
   a = 100
     b = 200
     def fn(c):
        d = 300
        print(a, b, c, d)
     fn(300)
     print("a = ", a)
     print("b = ", b)

局部变量说明:
    1. 在函数内首次对变量赋值是创建局部变量, 再次为变量赋值是修改局部变量的
  绑定关系
    2. 在函数内部的赋值语句不会对全局变量造成影响
    
python作用域概念:
    
    作用域也叫命名空间, 是访问变量时查找变量名的范围空间
python的四个作用域LEGB
作用域:                       英文解释                 英文简写
    
局部作用域:(函数内)             Local(function)                 L   
外部嵌套函数作用域               Enclosing  funciton locals      E
函数定义所在模块的作用域          Global(module)                  G
python 内置模块的作用域          Builtin(python)                 B
一般用函数来封装变量
示例见:
   namespace.py
  local
 enclosing function locals
  Builtin
   global
    enclosing function locals
     local
变量名的查找规则(查找顺序):
    
    1. 查找本地变量
    2. 查找包裹此函数的外部嵌套函数内部的变量
    3. 全局变量
    4. 内置变量

globals() / locals()函数
    globals()返回全局作用域内变量的字典
    locals() 返回局部作用域内变脸的字典
示例:
  
练习:
 
    写一个函数mysum 此函数的功能是返回:
       
     1 + 2 + 3 + 4 + 5 + 6........n的和
     def mysum(n)
     print(mysum(100)) 5050
  示例见:mysum.py
2. 写一个函数,mysum2
 
 此函数可以传入一个参数, 两个参数和三个参数:
 1.   当传入一个参数时, 这个参数代表终止数
 2.  当传入两个参数时, 第一个参数代表起始值,第二个参数代表终止值
 3.   当传入三个参数时, 第三个参数代表步长
 此函数的功能是返回从开始到终止值的和
 如: 
  
    print(mysum2(5)) #10  (0 + 1 + 2 + 3 + 4 + 5)
    print(mysum2(4, 6)) # 9  (4 +5)
    print(mysum2(5, 10, 2)) # 21  5 + 7 + 9  



global 语句:
作用: 
  1.告诉解释器,global 语句声明的一个或多个变量, 这些变量的作用域
为模块级的作用域的变量, 也称作为全局变量
  2.  全局声明(global) 
     将赋值变量映射到模块文件内部的作用域
 
 语法:
   global  变量1, 变量2,.....
示例:
  
  global  ga,  gb
  global  gc
global 声明示例见:
    
    global_statement.py
说明;
 1. 全局变量如果要在函数内部被赋值,则必须经过全局声明(否则会被认为是局部变量)
 2.  全局变量在函数内部不经过声明就可以直接访问
 3. 不能先声明局部变量,再用global声明为全局变量,此做法不符合规则
 4. global变量列表里的变量名不能出现在此作用域内的形参列表里

nonlocal语句:
    作用:
      告诉解释器, nonloca 声明的变量不是局部变量,也不是全局变量
      变量, 而是外部嵌套函数内的变量
    语法:
       
       nonlocal  变量名1, 变量名2, ....
    示例:
        nonlocal_statement.py 
  说明:
    
  1.  nonlocal语句只能在被嵌套函数内部进行使用
  2.  访问nonlocal变量将对外部嵌套函数作用域内的变量进行操作     
  3.  当有两层或两层以上函数嵌套时, 访问nonlocal变量只对最近一层
        变量进行操作
  4.  nonlocal语句的变量列表的变量名不能出现在此函数的参数列表中
说明3 示例:
     
  def f1():
     v= 100
     def f2():
       v= 200

        def