python之函数进阶

今天是2018年12月7日,第一次正式写或者说总结一天的学习!之前的学习内容会后续补充。今天主要学习了python中的函数动态传参,命名空间和函数嵌套调用!

1、函数的动态传参(*,**

  之前学到,参数分为形参和实参,实参分为位置参数、关键字参数、混合参数;形参与之对应是位置参数、默认参数,其中今天要介绍的就是形参总的动态传参,与他对应的是实参中的混合参数。

  (1)def fruit(*args)

      print(args)

      print(*args)

    func(“香蕉”,“苹果”,“大鸭梨”)

  这里*args属于形参,主要针对传输多个位置实参;args只是个变量名,可以自己定义;“*”在函数传参作用是将多个位置实参进行聚合,聚合成元组,从打印结果中可以看出args是一个(,)形式,但再打印*args,“*”在函数内部,还具有将元组打散。

  (2)def fruit(**kwargs)

      print(kwargs)    

      print(*kwargs)

    dic={"a":"香蕉","b":"苹果","c":"大鸭梨"}

    func(**dic)

    func(a=“香蕉”,b=“苹果”,c=“大鸭梨”)

  这里**args属于形参,主要针对传输多个关键字实参;kwargs只是个变量名,可以自己定义;“**”在函数传参作用是将多个关键字实参进行聚合,聚合成字典,从打印结果中可以看出kwargs是一个{key1:value1,key1:value1....}形式,但再打印*args,“*”在函数内部,还具有将字典打散,得到key值,“**”是将字典打散。

  总结:(1)“*”把列表、元组、字符串打散成位置参数进行传参;在形参位置,则是聚合成元组,并存储在变量名中;

        (2)“**”把字典打散成关键字参数进行实参传输;在形参位置,将关键字参数聚合成字典,存储在变量名中;

          (3)对于字典,一个“*”,打散得到的是key值。

     (4)args——arguments(参数);kwargs——keywordarguments(关键字参数)

                  (5)此函数格式为“无敌函数”,无敌传参!其中def func(*args,**kwargs)

                                                                                         pass

                                                                                   func(.....)

     (6)形参顺序——(位置参数,*args,默认值,**kwargs),这些可以四个可以任意组合,但顺序不能错!!!

  2、命名空间

   (1)定义:给存放名字和值的关系的空间

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

    注:命名空间可能有很多个,因为局部空间可能有很多个!

   (3)加载顺序:内置命名空间——>全局命名空间——>局部命名空间

   (4)取值顺序:局部命名空间——>全局命名空间——>内置命名空间

   (5)作⽤用域命名空间(用globals()和locals()查看):
              1. 全局作⽤用域: 全局命名空间 + 内置命名空间
              2. 局部作⽤用域: 局部命名空间

  3、函数调用与嵌套

      按顺序执行就可以了

       4、关键字global和nonlocal

                 global+变量:局部引进的话,表示从全局把变量引入到局部,后面使用的都是全局变量,能对全局变量进行修改

     nonlocal:在局部寻找离他最近的外层的变量,但最外层不能到全局空间。

     如果没有global和nonlocal,查找循序自己一层层往外找.......

 

 

     

    

 

 

  

 

 

  

 

 

 

 

posted on 2018-12-07 18:55  赤子之心心有所属  阅读(83)  评论(0编辑  收藏  举报

导航