• day10 函数进阶


    今日主要内容

    1. 动态传参

      形参: 1.位置参数  2. 默认值参数, 3. 动态传参

        重点:动态传参: 1. *args: 动态接收位置参数      2. **kwargs: 动态接收关键字参数

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

        无敌传参:  def func(*args, **kwargs):

        *, ** 在形参位置: 聚合作用    在实参位置: 打散作用(针对可可迭代对象list tuple str dict)

    def fun(*args):
    print(args)
    lst = [1, 4, 7]
    fun(lst[0], lst[1], lst[2])
    fun(*lst) # 可以使⽤*把⼀个列表按顺序打散
    s = "⾂妾做不到"
    fun(*s) # 字符串也可以打散, (可迭代对象)
    
    def fun(**kwargs):   #字典打散需要**
    print(kwargs)
    dic = {'a':1, 'b':2}
    fun(**dic)      
    View Code

      实参: 1. 位置参数  2. 关键字参数  3. 混合参数

    2.  名称(命名)空间和作用域:

      名称空间: 存放名字和值的关系的空间

      分类:

      1. 全局命名空间: 在py文件中, 函数外声明的变量都属于全局命名空间

      2. 局部命名空间:  在函数中声明的变量会存放在这里   写的代码从上到下

      3. 内置命名空间:  存放在python解释器为我们提供的名字  函数, 类, 方法, 其他模块, 对象

      加载顺序:  内置  全局   局部(函数执行的时候)

      取值顺序:  局部  全局  内置

      作用域: 作用范围

      分类:

      全局作用域: 全局 + 局部

      局部作用域:  局部

      globals()   查看全局作用域的名字

      locals()   查看当前作用域的名字

      参考: https://www.cnblogs.com/zhangxinhe/p/6963462.html

    3. 函数的嵌套(难点)

       明白每一层都会产生独立的的名称空间

    4. 关键字 nonlocal  global

      global : 在局部引入全局的内容, 可以升华一个变量为全局变量

      nonlocal : 在局部, 引入上一层名称空间的变量, 如果没有, 继续上一层......

    a = 1
    def fun_1():
        a = 2
        def fun_2():
            nonlocal a
            a = 3
            def fun_3():
                a = 4
                print(a)
            print(a)
            fun_3()
            print(a)
        print(a)
        fun_2()
        print(a)
    print(a)
    fun_1()
    print(a)
    View Code

    搞定这段就可以!!!  (1234331)

        

  • 相关阅读:
    物理机与虚拟机互通
    error while loading shared libraries: libevent-2.2.so.1: cannot open shared object file: No such file or directory
    DateTime.Now.ToFileTime
    洛谷-P2249 【深基13.例1】查找
    洛谷-P3817 小A的糖果
    洛谷-P3612 [USACO17JAN]Secret Cow Code S
    洛谷-P5019 铺设道路
    洛谷-P2437 蜜蜂路线
    洛谷-P1044 栈
    洛谷-P1255 数楼梯
  • 原文地址:https://www.cnblogs.com/Knight-huang/p/9879413.html
Copyright © 2020-2023  润新知