函数作用域

  python中的作用域分4种情况

L:local,局部作用域,即函数中定义的变量;

E:enclosing, 嵌套的父级函数的局部作用域,即包含此函数的上级函数的局部作用域,但不是全局的;

G:global,全局变量,就是模块级别定义的变量;

B:built-in, 系统固定模块里面的变量,比如int,bytearray等。搜索变量的优先级顺序是:作用域局部>外层作用域>当前模块中的全局>python内置作用域,也就是LEGB。例如

 1 x = int(2.9)  # int  built-in
 2 g_count = 0   # global
 3 o_count = 4
 4 def outer():
 5     o_count = 1  # enclosing   父子局部作用
 6     def inner():
 7         i_count = 2    #  local 本地作用
 8         print(o_count)  # 从里到外找
 9         print(i_count)
10     inner()
11 outer()
12 输出:
13 1
14 2

#####在局部作用域里面不能修改全局变量

在函数中引入全局变量就不能对全局变量进行修改    错误实例

1 count = 10
2 def test():
3     print(count)  # 报错
4     count = 2   # print已经引入count变量,就不能重新进行赋值
5 def test1():
6     count = 3    # 表示在局部变量中进行重新定义。所以不报错
7 输出:
8 1
9 2

想修改全局变量,只需加上global

修改上一级的变量使用nonlocal

posted @ 2020-02-27 15:21  竹石2020  阅读(162)  评论(0)    收藏  举报