• Python 基础第十天


    今日主要内容

    1.动态参数

    2.命名空间或名称空间

    3.函数的嵌套

    4.关键字global和nonlocal

    动态函数

    动态参数*args   ,**kwargs

    (1)*args

    接收的是实参对应的所有位置参数(实参中超出形参位置的),并将其放在元组中.

    例1.*args正确放置的位置(不带默认参数)

    例2:带默认参数,不影响默认参数的取值

    总结:

     形参对应顺序:位置参数,*args,默认参数

     (2)**kwargs  动态传参 

    将所有关键字参数(超过形参设置的关键字参数)添加到一个字典里.

    例3:**kwargs正确使用

    最终的排列顺序:

    例4:

    总结:

    最终顺序:位置参数,*args,默认参数,**kwargs

    一般工作的书写方式:

    def funcl(*args,**kwargs):

      pass

    funcl

    知识点: *的应用

    例5:*args,*的作用

    将各个可迭代的数据类型转换成元组形式,以前是元组的,直接套用原式

    例6:**kwargs 的** 作用

    总结 *,**

     在函数的调用执行时,

    *可迭代对象,代表打散(list,tuple,str,dict(键))将元素一一添加到args。

    **字典,代表打散,将所有键值对放到一个kwargs字典里。

    在函数定义时, *args,**kwargs代表的是聚合。

     def func(*args,**kwargs):  # 聚合
     print(args)
     print(kwargs)

     func(*,**)#打散

     =================================================================

    2.命名空间,名称空间

    命名空间一共分为三种:

      全局命名空间

      局部命名空间

      内置命名空间

    *内置命名空间中存放了python解释器为我们提供的名字:input,print,str,list,tuple...它们都是我们熟悉的,拿过来就可以用的方法。

    三种命名空间之间的加载与取值顺序:

    加载顺序:内置命名空间(程序运行前加载)->全局命名空间(程序运行中:从上到下加载)->局部命名空间(程序运行中:调用时才加载)

    取值顺序:

      在局部调用:局部命名空间->全局命名空间->内置命名空间

      在全局调用:全局命名空间->内置命名空间

    综上所述,在找寻变量时,从小范围,一层一层到大范围去找寻。

    如下图简单描述:

    加载为向下的箭头,取值为向上的箭头.

    作用域

    作用域就是作用范围,按照生效范围可以分为全局作用域和局部作用域。

    全局作用域:包含内置名称空间、全局名称空间,在整个文件的任意位置都能被引用、全局有效

    局部作用域:局部名称空间,只能在局部范围生效

    globals和locals方法

    例7:比较全局和局部作用域区别

    取的值全部放在字典里面.

    全局名称空间:py3中内置的所有变量

    局部名称空间:根据所在位置,对变量进行展示,如果所在的函数中有变量,则打印函数的变量,如果则空,只查找当前级内.

     对比

    函数的嵌套

    解决思路:

    1.先确认函数什么执行,没有看到调用函数,则函数不执行.即函数名()

    2.代码从上到下依次执行.

    3.调用函数:函数里面从上至下依次执行

    例8:通过举例理解上面的内容,就好理解了

     4 关键字:global 和 nonlocal  (声明变量)

    global:

      1,在局部空间内,声明一个全局变量。

      2,在局部作用域想要对全局作用域的全局变量进行修改时,需要用到 global(限于字符串,数字)。

     例9:

    如果不用global声明,则外部是找不到内部的变量的.

    如果声明,则外部可以使用此变量

     2,在局部空间内改变一个全局变量

    例10:

     nonlocal #将内部变量,引用到外部,不包括全局

    1,不能修改全局变量。

    2.在局部作用域中,对父级作用域(或者更外层作用域非全局作用域)的变量进行引用和修改,

    并且引用的哪层,从那层及以下此变量全部发生改变。(只要在函数内,就可以引用到外层,只要出了函数,到全局下就错误)

     

    总结:

    global和nonlocal用法相同,nonlocal不能反用到全局下,global可以从局部到全局这样使用.

  • 相关阅读:
    ceph概述
    docker网络
    ceph部署
    K8s集群搭建(二)
    K8s架构
    K8s集群搭建(一)
    Kubernetes介绍
    虚拟化网络管理(二)
    virt-manager创建虚拟机
    C#中TransactionScope的使用方法和原理
  • 原文地址:https://www.cnblogs.com/tom2ling/p/8672096.html
Copyright © 2020-2023  润新知