python递归函数调用顺序_python的递归函数

今日所得

函数递归

算法之二分法

三元表达式

列表生成式

字典生成式

匿名函数

常用的内置函数

函数的递归

是指在函数加括号调用的时候,会再次调用到自身的函数

不过需要一个条件来判断是否停止继续调用

#举个例子

deffunc():print('from func')

func()#当函数执行到这一步时又一次调用了函数自身

func()

上面这个列子实际是一个无限循环的,但是函数不应该无限循环下去,因为每一次调用函数都会产生一个属于它的名称空间,如果无限循环下去,那么就会尝试内存溢出的问题,于是python中有了一个递归层数的限制。

#我们通过改变上面的程序来查看这个限制是多少:

deffunc(n):print('from func',n) #将n的值打印出来

func(n+1) #每次递归让n加一

func(1) #从1开始

"""函数递归的深度为1000,但是不精准一般为998或者997左右

可以通过代码和模块来修改递归深度"""

importsysprint(sys.getrecursionlimit())

sys.setrecursionlimit(2000)

递归分为两个阶段

1.回溯:就是一次一次的调用自身的函数,但是调用的前提是每一次函数执行完毕之后,就会朝着最终答案向前一步,直到得到这个答案,达到结束函数的条件

2.递推:就是向回一步一步的反向推导出答案的过程

算法二分法:可以高效的从一个列表中找出你需要的元素是否在列表中

内部原理是使用函数的递归,从中间将列表一分为二,变成两个列表

判断你所需的元素与列表的中间值的大小,再从剩下的两个列表中找

****************前提是列表要有顺序*****************

三元表达式

是用来判断两个元素是否满足条件,满足条件则输出那个数

res = x if x > y elsey#如果if后面的条件成立返回if前面的值 否则返回else后面的值

"""三元表达式固定表达式

值1 if 条件 else 值2

条件成立 值1

条件不成立 值2"""

列表生成式

能够快速简单的对一个列表里的所有元素进行操作

列表生成式的内部原理:使用for循环先将列表里的元素一一拿出,交由if条件语句进行判断

如果满足if则会交给for之前的代码进行处理,如果不满足则会直接舍弃这个元素

匿名函数

所谓匿名函数,见名知意就是没有名字的函数

匿名函数的特点,执行完就自动销毁了,只是临时使用

res = (lambda x,y:x+y)(1,2)#:左边的相当于函数的形参#:右边的相当于函数的返回值#匿名函数通常不会单独使用,是配合内置函数一起使用

常用内置函数

map  zip  filter  sorted  reduce

#map 映射

l = [1,2,3,4,5,6]#print(list('hello'))

print(list(map(lambda x:x+5,l))) #基于for循环

#zip 拉链 # 基于for循环

l1 = [1,2,]

l2= ['jason','egon','tank'] #有几个元素能对应上就组合几个元素

l3 = ['a','b','c']print(list(zip(l1,l2,l3)))#filter 过滤 元素满足条件就过滤不要

l = [1,2,3,4,5,6]print(list(filter(lambda x:x != 3,l))) #基于for循环

#sorted 排序 将元素从小到大依次排序#reverse 反转将列表里的元素反过来排

l = ['jason','egon','nick','tank']print(sorted(l,reverse=True))from functools importreduce

l= [1,2,3,4,5,6]print(reduce(lambda x,y:x+y,l,19)) #19初始值 第一个参数#当初始值不存在的情况下 按照下面的规律#第一次先获取两个元素 相加#之后每次获取一个与上一次相加的结果再相加

你可能感兴趣的:(python递归函数调用顺序)