第六章 函数
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 递归公式