第六章 函数
6.2定义函数
def定义函数
def add():
def add_modify(a, b): result = a + b print(result)
调用函数
l函数在定义完成后不会立刻执行,直到被程序调用时才会执行。
函数名([参数列表])
add() add_modify(10, 20)
函数内部也可以调用其他函数,这被称为函数的嵌套调用。
def add_modify(a, b): result = a + b add() print(result) add_modify(10, 20)
6.3函数参数的传递
通常将定义函数时设置的参数称为形式参数(简称为形参),将调用函数时传入的参数称为实际参数(简称为实参)。函数的参数传递是指将实际参数传递给形式参数的过程。
函数参数的传递可以分为位置参数传递、关键字参数传递、默认参数传递、参数的打包与解包以及混合传递。
函数打包
“*” —— 接收以元组形式打包的多个值
“**”—— 接收以字典形式打包的多个值
In [1]: val = 1, 2, 3, 4 In [2]: type(val) Out[2]: tuple In [3]: val Out[3]: (1, 2, 3, 4)
关键字参数的传递
关键字参数的传递是通过“形参=实参”的格式将实参与形参相关联,将实参按照相应的关键字传递给形参。
使用符号“/”来限定部分形参只接收采用位置传递方式的实参。
默认参数的传递
函数在定义时可以指定形参的默认值,如此在被调用时可以选择是否给带有默认值的形参传值,若没有给带有默认值的形参传值,则直接使用该形参的默认值。
混合传递
def test(a, b, c=33, *args, **kwargs): print(a, b, c, args, kwargs) test(1, 2) test(1, 2, 3) test(1, 2, 3, 4) test(1, 2, 3, 4, e=5)
函数的返回值
函数中的return语句会在函数结束时将数据返回给程序,同时让程序回到函数被调用的位置继续执行。
如果函数使用return语句返回了多个值,那么这些值将被保存到元组中。
#角谷猜想 n = int(input("请输入一个正整数:")) while n != 1: if n % 2 == 0: k = n / 2 print("%d/2=%d" %(n, k)) n = k else: l = n * 3 + 1 print("%d*3+1=%d" %(n, l)) n=l
#模拟超市收银 price=float(input("请输入商品单价:")) if(price<0): print("输入不合法!") amount=int(input("请输入商品数量:")) total_price=price*amount print(total_price) if(total_price>=500): total_price1 = total_price * 0.8 print(total_price1) else: total_price1 = total_price print(total_price1 ) payment=int(input("请输入付款金额:")) margin=payment-total_price1 if (margin>0): print("找零"+str(margin)) else: print("余额不足!")
6.7递归函数
函数在定义时可以直接或间接地调用其他函数。若函数内部调用了自身,则这个函数被称为递归函数。
递归函数的执行可以分为:
1.递推:递归本次的执行都基于上一次的运算结果。
2.回溯:遇到终止条件时,则沿着递推往回一级一级地把值返回来。
def函数名([参数列表]):
if 边界条件:
rerun 结果
else:
return 递归公式