1.6 多类型传值和冗余参数
1.7 函数的递归调用
1.6 多类型传值和冗余参数
多类型传值
## 传元组(*元组变量名)
def fun(x, y):
return x + y
t = (1, 2) # 元素个数必须和函数变量数对得上,不然报错
# 调用
print(fun(*t)) # 在元组变量前加个*就可以了
> 3
print(fun(*(1,3))) # 这样写也可以
> 4
###################################
def fun(x, y, z):
return x + y + z
t = (1,2)
print(fun(2,*t)) # 如果是数字结合元组,元组必须写在最后;如果元组只有一个元素时,不可使用;否则报错
#################################
## 传字典(**字典变量名)
def fun(x, y, z):
return x + y + z
d = {'x':1, 'y':2, 'z':3} # 字典中的key必须和形参变量名一样;否则报错
print(fun(**d))
###################################
def fun(a, b, c, d, x, y, z):
return a + b + c + d + x + y + z
t = (1, 1)
d = {'x':1, 'y':1, 'z':1}
print(fun(1, 1, *t, **d))
冗余参数
def fun(x, *t, **d):
return x,t,d
print(fun(1))
> (1, (), {})
##########################
def fun(x, *t, **d):
return x,t,d
print(fun(1,2,'a','b'))
> (1, (2, 'a', 'b'), {})
##########################
def fun(x, *t, **d):
return x,t,d
print(fun(1,2,'a','b',y=2))
> (1, (2, 'a', 'b'), {'y': 2}) # 以等式转换字典
#########################
def fun(x, *t, **d):
return x,t,d
print(fun(1,2,'a',[1,2],*(1,2),y=2,**{'f':11}))
> (1, (2, 'a', [1, 2], 1, 2), {'y': 2, 'f': 11})
1.7 函数的递归调用
## 阶乘
def fun(n):
sum = 1
for i in range(1, n+1):
sum *= i
return sum
print(fun(10))
> 3628800
##############################
## 求和
def fun(n):
sum = 0
for i in range(1, n+1):
sum += i
return sum
print(fun(100))
> 5050
递归的注意事项
必须有最后的默认结果
if n == 0
递归参数必须向默认结果收敛的:
fun(n-1)
## 阶乘(递归法)
def fun(n):
if n == 0:
return 1
else:
return n * fun(n - 1)
print(fun(10))
> 3628800
#########################
## 求和(递归法)
def fun(n):
if n == 0:
return 0
else:
return n + fun(n - 1)
print(fun(100))
> 5050