[python] 作用域

Python 中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,

python的变量从作用域分为了以下几种: 
       - 局部作用域 L(local)  
       - 闭包函数外的函数中 E(Enclosing) 
       - 全局作用域 G(global) 
       - 内建作用域 B(build-in) 
python执行时查找作用域的顺序是L-E-G-B,即:先在局部找,局部找不到去局部外的局部(闭包),然后是全局再到内建

局部变量

定义在函数内部的变量拥有一个局部作用域,被叫做局部变量

字符串、int等无法更改。

复杂的数据结构集合、字典、列表可以在函数作用域更改

 

global,nonlocal

global:指定当前变量使用外部的全局变量 
nonlocal:修改嵌套作用域(enclosing 作用域,外层非全局作用域)中的变量 

如果要修改嵌套作用域(enclosing 作用域,外层非全局作用域)中的变量则需要 nonlocal 关键字了,如下实例:

#!/usr/bin/python3
 
def outer():
    num = 10
    def inner():
        nonlocal num   # nonlocal关键字声明
        num = 100
        print(num)
    inner()
    print(num)
outer()
以上实例输出结果:

100
100

 

posted @ 2019-03-12 23:13  Moke丶青  阅读(116)  评论(0编辑  收藏  举报