函数的进阶
动态参数
*args 动态位置参数
*在形参位置叫做聚合
以位置的形式传参 得到的是元组
**kwargs 动态默认参数
**在形参的时候是聚合
以关键字的形式传参 得到的是字典
args 和 kwargs 是可以更换的,但程序员约定都是它
用途
在不明确接受参数的数量时,用*args 和 **kwargs
参数位置
形参 : 位置参数 > 动态位置参数(*args) > 默认参数 > 动态默认(关键字)参数(**kwargs)
实参 : 位置参数 > 关键字参数
在实参调用的时候,*是将可迭代的对象打散,字典是将键取出
在形参处出现*就是在聚合
在实参调用的时候,**就是将字典打散成 关键字参数 (键 = 值)
在形参出出现**就是将关键字参数聚合成一个字典
函数的注释
定义完函数后写 """ """ 即可添加注释
查看注释 print(函数名.__doc__)
查看函数名 print(函数名.__name__)
名称空间
内置空间:内置空间中所有代码
全局空间:自己写的py文件
局部空间:函数中的代码
加载顺序: 内置空间 > 全局空间 > 局部空间
取值(查找)顺序:局部空间 > 全局空间 > 内置空间 (找不到就报错)
作用域
全局作用域:内置+全局 = 全局作用域
局部作用域:函数内的就是局部作用域
global 和 nonlocal
global:声明要在全局里修改一个变量 在局部修改全局变量,没有就创建一个
nonlocal:在一个局部空间内,nonlocal会修改离它最近的变量,如果上一层没有,就继续向上找,直到局部空间头部
函数的嵌套