作用域

动态参数:可以传递任意个参数

位置动态:*名称

ex:def talking(*word)

关键字动态传参: **名称

ex:def talking(**word)

无敌传参def talking(*arg,**word)

传参的顺序为:位置参数,动态参数,默认参数,关键字参数

       位置参数 > *args > 默认值参数 > **kwargs

命名空间

  在Python解释器开始执行之后,就会在内存中开辟一个空间,每当遇到一个变量的时候,就把变量名和值之间的关系记录下来,但是当遇到函数定义的时候,解释器知识把函数名读入内存,表示这个函数存在了,至于函数内部的变量和逻辑,解释器是不关心的,也就是说一开始的时候只是函数加载进来,仅此而已,只有当函数被调用和访问的时候,解释器才会根据函数内部声名的变量来进行开辟变量的内部空间,随着函数执行完毕,这些函数内部变量占用的空间也会随着函数执行完毕而被清空。

1. 全局命名空间--> 我们直接在py⽂件中, 函数外声明的变量都属于全局命名空间
2. 局部命名空间--> 在函数中声明的变量会放在局部命名空间
3. 内置命名空间---> 存放python解释器为我们提供的名字, list, tuple, str, int这些都是内

置命名空间

加载顺序:
1. 内置命名空间
2. 全局命名空间
3. 局部命名空间(函数被执⾏的时候)

取值顺序:
1. 局部命名空间
2. 全局命名空间
3. 内置命名空间

作用域: 作用域就是作用范围, 按照生效范围来看分为 全局作用域和局部作用域
全局作用域: 包含内置命名空间和全局命名空间. 在整个文件的任何位置都可以使用(遵循
从上

作用域命名空间:
1. 全局作用域: 全局命名空间 + 内置命名空间
2. 局部作用域: 局部命名空间

关键字global和nonlocal
首先我们写这样一个代码, 首先在全局声明一个变量, 然后再局部调一这个变量, 并改变这
个变量的值

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

原文地址:https://www.cnblogs.com/kangxi/p/9175163.html