从入门到自闭之Python名称空间

名称空间:

  1. 内置空间:python解释器自带的一块空间

  2. 全局空间:py文件中顶格写的就是全局空间

  3. 局部空间:函数体中就是局部空间

  4. 加载顺序:

    1. 内置空间

    2. 全局空间

    3. 局部空间

              # def func():
              #     a = 1
              #     print(a)
              # func()
      
  5. 取值顺序:

    1. 局部空间

    2. 全局空间

    3. 内置空间

      a = 10
      def func()
      	print(a)
      func()
      
  6. 作用域:

    1. 全局作用域:全局+内置
    2. 局部作用域:局部

函数的嵌套

​ 不管在什么位置,只要是函数名()就是在调用一个函数。

# 混合嵌套:
# def f1():
#     print(11)
#
# def f2():
#     print(22)
#     f1()
#
# def f3():
#     print(33)
#     f1()
#
# def run():
#     f3()
#     f2()
#     f1()
# run()

例2:
# def func(a):
#     print(a)
#     return f1(foo(a))
#
# def foo(b):
#     print(b)
#     return b + 5
#
# def f1(args):
#     return args + 10
#
# print(func(5))
输出结果:5,5,20
# def foo(a):
#     a = 10
#     def f1(b):
#         c = b
#         def foo(c):
#             print(c)
#             print(foo.__doc__)
#         foo(c)
#         print(b)
#     f1(a)
#     print(a)
# foo(25)
输出结果:10,10,10

修改全局:

global,只修改全局

nonlocal:修改局部,修改离他最近的一层,上一层没有继续向上层查找,只限局部

# a = 10
# def func():
#     global a
#     a = a - 6
#     print(a)
# fun ()
# a = 100
# def func():
#     b = 10
#     def foo():
#         b = a
#         def f1():
#             nonlocal b
#             b = b + 5
#             print(b)  # 105
#         f1()
#         print(b)  # 105
#     foo()
#     print(b) # 10
# func()
# print(a) # 100

原文地址:https://www.cnblogs.com/heyulong1214/p/11528269.html