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 '''

浙公网安备 33010602011771号