函数的进阶 10

一,  函数参数--动态传参 (形参的第三种)

    动态参数分为两种: 

       1.动态接收位置参数   *args

          位置参数 按照位置进行传参   动态参数必须在位置参数后面    如果放在位置参数后面会报错,因为前面传递进去的参数都被*args参数接收了,后面的位置参数永远接收不到参数

          如果加上默认值参数则 三个参数的顺序为 : 位置参数 动态参数 默认值参数 这样位置参数能接收到参数,动态参数也能接收到,默认值参数如果不给 则默认值永远生效.

       2.动态接收关键字参数

          在Python中用**来接收动态关键字参数 接收到的是一个字典

            语句    def func(**kwargs):

                    print(kwargs)

                  func(**{key:value},**{key:value})         

            顺序的问题 在函数的调用时候如果先给出关键字参数,则整个参数列表会报错 因为这样会导致参数混乱赋值 所以位置参数必须在关键字参数前面,动态接收关键字也要在后面

        最终顺序为: 位置参数>*args>默认值参数>**kwargs

        在形参上用*  ** 表示聚合 实参位置表示打散

二 . 命名空间

    给存放名字和值关系的空间叫一个名字 即命名空间 变量在存储的时候就是存储在这片空间中的

    命名空间的分类:

      1.全局命名空间-->直接在py文件中,函数外生命的函数都属于全局命名空间

      2.局部命名空间-->在函数中声明的变量会放在局部命名空间

      3.内置命名空间-->存放Python解释器为我们提供的名字,list,str,int这些都是内置命名空

     加载顺序: 3   1    2(函数被执行的时候)

     取值顺序: 2   1    3

     作用域: 作用域就是作用范围,按照生效范围来看分为 全局作用域和局部作用域 

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

        2.局部作用域: 局部命名空间

        可以通过globals()函数来查看全局作用域中的内容,也可以通过locals()来查看局部作用域中的变量和函数信息

三 函数的嵌套

    只要遇见了()就是函数的调用,没有()就不是函数的调用

    函数的执行顺序

四 关键字global 和 nonlocal

      global表示 不再使用局部作用域中的内容了,而该用全局作用域中的变量

      nonlocal表示 在局部作用域中 调用父级空间中的变量

       

        

原文地址:https://www.cnblogs.com/f-g-f/p/9696629.html