命名空间

一,命名空间

  我们给存放名字和值的关系的空间起⼀个名字叫: 命名空间. 我们的变量在存储的时候就
是存储在这片空间中的.
命名空间分类:
1. 全局命名空间--> 我们直接在py⽂件中, 函数外声明的变量都属于全局命名空间
2. 局部命名空间--> 在函数中声明的变量会放在局部命名空间
3. 内置命名空间--> 存放python解释器为我们提供的名字, list, tuple, str, int这些都是内
  置命名空间
    加载顺序:
1. 内置命名空间
2. 全局命名空间
3. 局部命名空间(函数被执⾏的时候)
    取值顺序:
1. 局部命名空间
2. 全局命名空间
3. 内置命名空间
作⽤域: 作⽤域就是作⽤范围, 按照⽣效范围来看分为 全局作⽤域和局部作⽤域
全局作⽤域: 包含内置命名空间和全局命名空间. 在整个⽂件的任何位置都可以使⽤(遵循
从上到下逐⾏执⾏). 局部作⽤域: 在函数内部可以使⽤.
 
  作⽤域命名空间:
1. 全局作⽤域: 全局命名空间 + 内置命名空间
2. 局部作⽤域: 局部命名空间
我们可以通过globals()函数来查看全局作⽤域中的内容, 也可以通过locals()来查看局部作
⽤域中的变量和函数信息
 1 a = 10
 2 def func():
 3  a = 40
 4  b = 20
 5  def abc():
 6  print("哈哈")
 7  print(a, b) # 这⾥使⽤的是局部作⽤域
 8  print(globals()) # 打印全局作⽤域中的内容
 9  print(locals()) # 打印局部作⽤域中的内容
10 func()

二·,函数的嵌套

1. 只要遇⻅了()就是函数的调⽤. 如果没有()就不是函数的调⽤
2. 函数的执⾏顺序
 1 def fun1():
 2    print(111)
 3 def fun2():
 4    print(222)
 5    fun1()
 6  
 7 fun2()
 8 print(111)
 9 # 函数的嵌套
10 def fun2():
11    print(222)
12    def fun3():
13      print(666)
14    print(444)
15    fun3()
16      print(888)
17 print(33)
18 fun2()
19 print(555)

三,关键字global与nonlocal

局部函数中的a并没有改变全部中的a的值

1 a = 100
2 def func():
3  global a # 加了个global表示不再局部创建这个变量了. ⽽是直接使⽤全局的a
4  a = 28
5  print(a)
6 func()
7 print(a)
global表⽰. 不再使⽤局部作⽤域中的内容了. ⽽改⽤全局作⽤域中的变量
1 lst = ["麻花藤", "刘嘉玲", "詹姆斯"]
2 def func():
3  lst.append("⻢云云") # 对于可变数据类型可以直接进⾏访问. 但是不能改地址. 说⽩
4 了. 不能赋值
5  print(lst)
6 func()
7 print(lst)
nonlocal 表⽰在局部作⽤域中, 调⽤⽗级命名空间中的变量.
a = 10
def func1():
      a = 20
      def func2():
          nonlocal a
         a = 30
         print(a)
     func2()
     print(a)
func1()
结果:
加了nonlocal
30
30
不加nonlocal
30
20            

 

 

posted on 2023-11-20 23:33  我才是最帅的那个男人  阅读(39)  评论(0编辑  收藏  举报

导航