Knight_day10

  • 函数动态参数

    函数为了拓展或对于传入实参的数量不固定

    万能(动态)参数:*args **kwargs

    *的用法:

      在函数的定义时,在位置参数浅加个*,聚合。

      在函数调用(执行)时,在可迭代对象前加*,打散。

    *args **kwargs:

      *args:将所有实参位置参数聚合到一个元组,并赋值给args

      **kwargs:将所有实参关键字参数聚合到一个字典,并赋值给kwargs

    形参顺序:

      位置 *args 默认 **kwargs

  • 名称空间 临时名称空间 作用域 取值顺序 加载顺序

    

 

    名称空间存放变量与值的对应关系,函数名与函数体的对应关系。注意:函数体不加载到内存,到执行时,func()临时开辟一个空间,称为临时(局部)名称空间,执行完就消失。

    python中名称空间:

      全局名称空间:py文件所有内容(除函数)

      局部(临时)名称空间:执行函数时创建

      内置名称空间:len input print 等

    作用域:

      全局作用域:全局名称空间 + 内置名称空间

      局部作用域:局部(临时)名称空间

    取值顺序:

      1.满足就近原则

      2.局部 ----> 全局 ----> 内置  单向,从小到大

 

 

# len = 6
def func1():
    # len = 3
    return len
print(func1())
'''
<built-in function len>
'''

    加载顺序:加载的是名称空间

      内置 ----> 全局(当程序执行时) ----> 局部(当函数调用时000)

  • 函数的嵌套

    原则:

      1.遇到函数名() 才执行

      2.执行完该函数之前不执行下面的

  • global nonlocal

    局部名称空间对全局名称空间中的变量可以引用,但不能改变。

    在局部名称空间中修改变量,解释器会认为该变量在局部中定义了。

    global:

      1.在局部名称空间中声明全局变量

      2.在局部名称空间中对全局变量进行修改

    nonlocal:

      子函数对父函数进行修改用nonlocal,此变量不能是全局变量。

 

      在局部作用域中,对父级作用域(或更外层非全局作用域)变量进行引用修改,从那层及以下变量全部发生改变。

def func1():
    count = 666
    print('1', count)
    def inner():
        print('2', count)
        def func2():
            nonlocal count
            print('3', count)
            count += 1
            print('4', count)
        func2()
        print('5', count)
    inner()
    print('6', count)
func1()
'''
1 666
2 666
3 666
4 667
5 667
6 667
'''

 

posted @ 2022-02-12 00:04  夜色无边  阅读(41)  评论(0)    收藏  举报