函数
定义(创建):
可以重复执行的语句块,也可以重复调用
def+函数名(形式参数列表):
具体的函数执行代码(语句块)
形参
1.默认参数:在函数名后的参数中直接赋值
2.位置形参:按照参数内的位置顺序对函数进行赋值
3.关键字形参:位置形参在关键字形参之前,(a,b,c)→(1,c=3,b=2)
4.*args传入元组
5.**dict传入字典
###函数的形参定义自左至右的顺序为:位置形参,星号元组形参,命名关键字参数,双星号字典形参
调用:
当需要执行函数时,输入函数名(参数)以调用
实参:
1.位置形参:按照参数内的位置顺序对函数进行赋值
星号序列传参(*序列)元组 列表拆分依次按位置传给函数。
2.关键字形参:位置形参在关键字形参之前,(a,b,c)→(1,c=3,b=2)
星号字典传参(**字典)
返回值:
在函数后返回一个值,若return后没有定义函数则返回None,如果有定义函数则返回函数值赋值给变量
匿名函数:
函数名不可调用,简洁,赋值给变量,lambda(变量,表达式),只能包含一行表达式
变量作用域:
局部变量(函数内部)
全局变量(外面没有函数)
L(函数内部)E(嵌套内部)G(全局变量)B(内置)
global a声明
a=1
nonlocal a
a=2
内存分配:
若传入数据是不可变类型,则函数执行以后不能直接改变原数据,若传入数据是可变类型,函数执行后可以直接改变数据。可变类型:列表,字典,集合;不可变类型:整数,浮点数,字符串,元组,布尔值,复数等。创建函数时放在代码区,调用的时候才在内存中开创一个栈帧做临时存储空间,不可变类型在被改变时,本质上是重新指向另一个内存地址的新数据,而可变类型的内存地址则保持不变。
递归调用
函数直接或间接的调用自身
简化代码,与循环语句搭配使用,在循环中可以重复执行直至满足停止循环的条件