在Python
中函数也是一种对象
,有几种特别的应用,本文中先讲解前两种:
递归
递归
又称为递回
,是指在函数的定义中使用函数自身的方法。递归最典型的例子就是斐波那契数列的实现。
def fib(n):
if n == 0:
return 0
elif n == 1:
return 1
else:
return fib(n-1) + fib(n-2)
if __name__ == "__main__":
result = fib(4)
image.png
过程解释
- n=0:返回0
- n=1:返回1
- n=4:
- 第一步变成:fib(3) + fib(2)
- 第二步变成:fib(3)变成fib(2)+fib(1);fib(2)变成fib(1)+fib(0)=1
- 第三步变成:步骤二中的fib(2)继续变成fib(1)+fib(0),fib(1)+fib(0)+fib(1)=2
总结:每个递归的过程都是朝着最开始的条件挺近。递归是能够被迭代或者循环替代的,后者的效率高于递归。递归慎用。
m = {0:0, 1:1}
def fib(n):
if not n in m.keys():
m[n] = fib(n-1) + fib(n-2)
return m[n]
if __name__ == "__main__":
f = fib(5)
image.png
传递函数
将函数当作参数传入到另一个函数中。
def power_seq(func, seq):
return [func(i) for i in seq]
def ping_fang(i):
return i ** 2
if __name__ == "__main__":
num_seq = [1, 2, 3]
res = power_seq(ping_fang, num_seq)
image.png
练习题
方法1
将列表list=[1, 2, 3]变成l["1", "2", "3"]
def fun(func, seq):
return [func(i) for i in seq]
def str_change(i):
return "{}".format(i)
if __name__ == "__main__":
list1 = [1, 2, 3]
res = fun(str_change, list1)
image.png
方法2
list1 = [1, 2, 3]
list2 = []
for i in list1:
list2.append("{}".format(i))
print(list2)
image.png
方法3
通过for
循环进行遍历list1
中的每个元素,再利用str()
函数进行转化,最后通过list()函数显示出来:
list1 = [1, 2, 3]
list2 = [str(i) for i in list1]
print(list(list2))
结果:
['1', '2', '3']