函数
函数
初识函数
以功能为导向的,一个函数实现一个功能
函数增加了代码的复用性,和可读性
函数的结构
def 函数名(参数):
#函数体
...
return 返回值
函数名(参数)## 函数的执行/调用
函数的调用
函数名 + (参数) 函数的执行者
函数的返回值
返回给 函数的执行者
return ## 返回None
return a ## 返回 a
return a,b ## 返回(a,b)
函数的传参
实际参数
调用时传入的是实际参数
1 位置参数 一一对应
2 关键字参数
3 混合参数 ## 传参数时 关键字必须要写在默认参数的后面
形式参数
1 位置参数
2 默认值参数 # 在位置参数的后面,传值时可以关键字传,也可以位置传
3 万能参数
*args (函数定义时,将实参角度的所有位置参数,聚合到一个元组中,重点是 * )
**kwargs(函数定义时,将实参角度所有关键字参数,聚合到一个字典中)
4 仅限关键字参数:位置在默认参数和**kwargs之间,只能以关键字的方式传值
* 的魔性用法
* 实际是 迭代后面的对象
当函数定义时,*代表聚合 **聚合关键字参数 成字典
当函数执行时,*代表打散/解构 **打散字典
函数外,* 可以接收剩余元素
lis = [1,2,3,4,5]
a,b,*c = lis
print (c)
## [3,4,5]
注意 a,*c,b = (1,2,3,4,5) 此时的 c 也是列表类型 [2,3,4]
空间角度研究函数
全局命名空间
py文件运行时,储存执行的py文件中(除去函数内部)的所有变量与值或地址的对应关系,整个py文件结束后,才会消失
局部(临时)命名空间
函数执行时,在内存中临时开辟的一个空间,存放的是函数中的所有变量和值或地址的对应关系,函数执行结束,就会释放临时空间
内置命名空间
input print 等内置函数等
取值顺序和加载顺序
加载顺序: 内置-->全局-->(函数执行时)局部
取值顺序: 就近原则 局部 -- > 全局 -- > 内置
作用域
全局作用域:全局命名空间 内置命名空间
局部作用域:局部命名空间
globals() locals()
globals 返回全局作用域的所有变量和值
locals 返回当前作用域的所有变量和值