命名空间

1.作用域:变量或者函数的声明周期
  1.全局命名空间--> 我们直接在py文件中, 函数外声明的变量都属于全局命名空间
  2.局部命名空间--> 在函数中声明的变量会放在局部命名空间
  3.内置命名空间--> 存放python解释器为我们提供的名字, list, tuple, str, int这些都是内置命名空间
  # 最开始开辟一个自己的命名空间 -内置命名空间
  #加载顺序:内置=>全局=>局部
  #取值顺序: 局部==>全局==>内置
  globals() # 查看全局作用域中的内容
  locals() #查看当前作用域的内容

2.global nonlocal 对于外层变量 如果没有相关关键字修饰的话 只能读 不能改变
  global a # 表示当前作用域使用的a是全局中的变量
  这种 改变是危险的 共享的改变是危险的
  还可以定义一个全局的a(强制的)
  nonlocal a # 找的是局部里面,离他最近的上层的那个变量
  直到找到为止

 1 # 7, 下面代码成立么?如果不成立为什么报错?怎么解决?
 2 # 7.1
 3 #a = 2
 4 # def wrapper():
 5 #     print(a)
 6 # wrapper()
 7 # 不报错 调用顺序是局部、全局、内置
 8 # 7.2
 9 # a = 2
10 # def wrapper():
11 #     global a
12 #     a += 1
13 #     print(a)
14 #
15 #
16 # wrapper()
17 # 这个报错 添加一个关键字 global,只能这个全局变量 不能改变
18 # 要改变的话 需要加 关键字global
19 # 7.3
20 # def wrapper():
21 #     a = 1
22 #     def inner():
23 #         nonlocal a
24 #         print(a)
25 # 
26 #     inner()
27 # wrapper()
28 # 不报错 读这个变量是可以的
29 # 7.4
30 # def wrapper():
31 #             a = 1
32 #             def inner():
33 #                 a += 1
34 #                 print(a)
35 #             inner()
36 #     wrapper()
View Code

 

posted @ 2019-03-22 20:06  Jonathan1  阅读(118)  评论(0编辑  收藏  举报