函数
一、函数定义和调用
py
# 定义函数
def 函数名(形参):
函数体
return XXX
# 调用函数
函数名(实参)
二、函数参数传递
位置实参:根据形参对应的位置进行实参传递
关键字实参:根据形参名称进行实参传递
py
def calc(a, b):
c = a + b
return c
calc(10, 20) # 位置参数
calc(b=10, a=20) # 关键字参数
- 函数调用过程中如果是不可变对象,函数体的修改不会影响实参的值,如果是可变对象,则函数体的修改会影响实参的值
三、函数返回值
- 若函数没有返回值,则return可省略不写
- 若函数返回值只有一个,则直接返回原类型
- 若函数返回值有多个,则返回的结果为元祖
四、参数定义
- 函数的默认参数
py
def fun(a, b=10):
print(a,b)
fun(10) # a=10,b=10
fun(10,20) # a=10,b=20
- 个数可变的位置参数*args
使用*定义个数可变的位置参数,结果为一个元祖
py
def fun(*a):
print(a)
fun(10) # (10,)
fun(10,20,30) # (10, 20, 30)
- 个数可变的关键字参数**kwargs
使用**定义个数可变的关键字参数,结果为一个字典
py
def funs(**b):
print(b)
funs(a=10) # {'a': 10}
funs(a=10,b=20,c=30) # {'a': 10, 'b': 20, 'c': 30}
递归函数
- 递归函数概念
如果在一个函数的函数体内调用了该函数本身,这个函数就称为递归函数 2. 递归函数的组成部分
递归的调用与递归的终止条件
- 递归的调用过程
每递归调用一次函数,都会在栈内存分配一个栈帧,每执行完一次函数,都会释放响应的空间
- 递归的优缺点
- 优点:占用内存多,效率低
- 缺点:思路和代码简单
- 递归函数应用
使用递归函数计算阶乘
py
# 使用递归函数计算阶乘
def fac(n):
if n == 1:
return 1
else:
res = n * fac(n - 1)
return res
print(fac(6))
斐波那契数列
py
def fac(n):
if n == 1:
return 1
elif n == 2:
return 1
else:
res = fac(n - 1) + fac(n - 2)
return res
# 输出前六项
for i in range(1,7):
print(fac(i),end='\t')
#1 1 2 3 5 8