Python札记20_递归、传递

浏览: 1080

Python中函数也是一种对象,有几种特别的应用,本文中先讲解前两种:

  • 递归函数
  • 传递函数
  • 嵌套函数

递归

递归又称为递回,是指在函数的定义中使用函数自身的方法。递归最典型的例子就是斐波那契数列的实现。

def fib(n):
if n == 0:
return 0
elif n == 1:
return 1
else:
return fib(n-1) + fib(n-2) # 两个函数调用fib()函数本身

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(): # 判断n是否在m的键中
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']
推荐 0
本文由 皮大大 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册