• 动态参数 名称空间 作用域 作用域链 加载顺序 函数的嵌套 global nonlocal 等的用法总结


    03,动态参数 *args,**kwargs

    # 用户传入到函数中的实参数量不定时,或者是为了以后拓展,
    # 此时要用到动态参数*args,**kwargs(万能参数。)
    # *args接收的是所有的位置参数。
    # **kwargs接收的是所有的关键字参数。
    # 位置参数,*args,默认参数, **kwargs
    # def func1(*args, **kwargs):
    #     print(args)
    #     print(kwargs)
    
    # func1(1, 2, 3, 4)
    # func1(x=4, y=5, z=6)
    def func1(*args, **kwargs):
         print(kwargs)
    func1(1, 2, 3, x=4, y=5, z=6)

    先拿位置参数 和 默认参数  发现 *args 要放在他俩中间

    def func(a, b, *args, sex='男'):
    print(a)
    print(b)
    print(args)
    print(sex)
    func(1, 2, 5, 6, 7, 8, sex ='女')

    再拿 位置参数,*args, 默认参数,  发现 **kwargs 只能放在最后 

    def func(a, b, *args, sex='', age=20, **kwargs):
        print(a)
        print(b)
        print(args)
        print(sex)
        print(age)
        print(kwargs)
    func(1, 2, 5, 6, 7, 8, x=5, y=9, age=33, sex ='')

    PS: 计算器  输入数字 进行相加

    def sum1(*args):
        ret = 0
        for i in args:
            ret += i
        return ret
    print(sum1(1, 2, 3,))

          * 的魔法用法

      def func(*args, **kwargs):             #  函数的定义  * 用意是聚合

      在函数的执行时,                           #    *   的用意是打撒。

    def func(*args, **kwargs):
        print(args)
        # print(kwargs)
    l1 = [1, 2, 6]
    l2 = [55, 66, 77]
    s1 = 'dhfjgdfgj'
    s2 = 'vocvb,cmb'
    dic1 = {'name': 'alex'}
    dic2 = {'age': 99}
    func(*l1, *l2)
    # func(**dic1, **dic2)
    def func(*args, **kwargs):
        # print(args)
        print(kwargs)
    l1 = [1, 2, 6]
    l2 = [55, 66, 77]
    s1 = 'dhfjgdfgj'
    s2 = 'vocvb,cmb'
    dic1 = {'name': 'alex'}
    dic2 = {'age': 99}
    # func(*l1, *l2)
    func(**dic1, **dic2)


    04,名称空间,作用域,作用域链,加载顺序等。

    #当程序运行时,代码从上至下一次读取,遇到变量与值,
    # 他会在内存中开辟一个空间,存放变量与值的内存地址的对应关系。
    #这样存储变量与值得对应关系的空间叫做名称空间(命名空间)
    #当解释器遇到函数时,他会将函数名存储在内存中,但是对于函数体莫不关心。
    #当函数执行时,他会通过函数名找到函数体,然后将函数体里面的变量等对应关系存放在一个
    # 临时开辟的空间中,随着函数的结束,临时的空间关闭,这样的空间叫做临时名称空间
    # def func1():
    #     a = 2
    #     b = 3
    # func1()

    名称空间:
    内置名称空间
    全局名称空间
    局部名称空间
    加载顺序内置名称空间 ---> 全局名称空间(程序运行时) ---->局部名称空间(函数执行时)
    作用域:
    全局作用域:内置名称空间 全局名称空间
    局部作用域:局部名称空间
    取值顺序(单向):局部名称空间(函数执行时) ---> 全局名称空间 ---> 内置名称空间
    L local
    E eclose
    G global
    B Built-in





    05,函数的嵌套。
    判断 运行的 先后顺序
    print(111)   # 1
    def func1():
        name = 'alex'
        print(name)  # 2
        def inner():
            a = 2
            print(a)  # 3
        inner()
    func1()
    
    
    print(111)        # 1
    def func1():  
        name = 'alex'
        print(name)   # 3
        def inner():
            a = 2
            print(a)  # 4
        inner()
    print(333)     # 2
    func1()
    print(444)   # 5
    print(111)   # 1
    def func1():
        name = 'alex'
        print(name)  # 2 
        def inner():
            a = 2
            print(a)  # 4
        print(444)   # 3
        inner()
        print(555)   # 5
    func1()


    06,global,nonlocal。

    # 在全局名称空间里得到局部名称空间的变量
    # 1,return
    # 2,global
    # 1,在局部作用域中声明一个全局变量。
    # 2,在局部作用域中,更改一个全局变量。
    # 补充:
    # 对于可变的数据类型,函数中如果对其进行操作,改变全局不用引用global.
    return
    # def func1():
    #     name = 'alex'
    #     return name
    # ret = func1()
    # print(ret)
    
    
         global
    1,在局部作用域中声明一个全局变量。
    # def func1():
    #     global name
    #     name = 'alex'
    # func1()
    # print(name)
    
    
    2,在局部作用域中,更改一个全局变量。
    # name = '老男孩'
    # def func1():
    #     global name
    #     name = 'alex'
    # func1()
    # print(name)
     # 对于可变的数据类型,函数中如果对其进行操作,改变全局不用引用global.
    # l1 = [1, 2, 3]
    # def func1():
    #     l1.append(666)
    # func1()
    # print(l1)
    
    
        nonlocal
    
    
    #1,不能改变一个全局变量。
    # 在局部作用域中,对父级作用域(或者更外层作用域非全局作用域)的变量进行引用和修改,
    # 并且引用的哪层,从那层及以下此变量全部发生改变。
    
    
    1,不能改变一个全局变量。 报错!
    name = "老男孩"
    def func1():
        nonlocal name
        print(name)
    func1()
    # 在局部作用域中,对父级作用域(或者更外层作用域非全局作用域)的变量进行引用和修改,
    # 并且引用的哪层,从那层及以下此变量全部发生改变。
    def func1():
        name = 'alex'
        print(name)  # 1, alex
        def inner():
            nonlocal name
            name = '老男孩'
            print(name)  # 2 老男孩
        inner()
        print(name)  # 3 老男孩
    func1()
     








  • 相关阅读:
    2020.12.17
    2020.12.16
    2020.12.15
    2020.12.13
    JavaScript变量:
    第二十七章 ansible变量介绍
    今日收获
    今日收获
    今日收获
    今日收获
  • 原文地址:https://www.cnblogs.com/HoneyTYX/p/9021244.html
Copyright © 2020-2023  润新知