• 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,查找循序自己一层层往外找.......

     

     

         

        

     

     

      

     

     

      

     

     

     

     

  • 相关阅读:
    Mina、Netty、Twisted一起学习(三):TCP前缀固定大小的消息(Header)
    集装箱set相关算法
    企业视觉-大型电商(制)-高性能的用户视觉性能(1)
    周期节
    在近排博客活动已被删除几篇文章
    [Python] Different ways to test multiple flags at once in Python
    [Angular] Use :host-context and the ::ng-deep selector to apply context-based styling
    [Javascirpt AST] Babel Plugin -- create new CallExpression
    [Python] Object spread operator in Python
    [Javascript AST] 3. Continue: Write ESLint rule
  • 原文地址:https://www.cnblogs.com/kevin-red-heart/p/10084534.html
Copyright © 2020-2023  润新知