函数递归、函数式与其他函数
文章目录
- 函数递归、函数式与其他函数
- 一、函数递归
- 二、函数式
- 1.匿名函数
- 2.max/min函数
- 3.sorted函数
- 4.map函数
- 5.reduce函数
- 6.filter函数
- 三、其他函数
- 1.bytes
- 2.eval
- 3.round
- 4.sum
- 5.__import__
- 6.zip
- 7.不常用的一些函数
一、函数递归
函数递归调用(是一种特殊的嵌套调用):在调用一个函数的过程中,又直接或间接地调用了该函数本身。
递归必须要有两个明确的阶段:
- 递推:一层一层递归调用下去
- 回溯:递归必须要有一个明确的结束条件,在满足该条件时结束递推
def func(count):if count>10:return #结束条件func(count+1)#递推调用函数funcfunc(0)
当递归调用函数而没有停止条件时,就会出现无限循环的过程,但是python对函数的递归深度做出了限制(默认为1000),但递归次数大于最大递归深度时,就会报错。
sys.setrecursionlimit函数可以修改递归的最大深度。
def func(count):if count>2000:return #结束条件func(count+1)#递推调用函数funcfunc(0)
<<<RecursionError: maximum recursion depth exceeded in comparisonimport sys
sys.setrecursionlimit(3000)
def func(count):if count>2000:return #结束条件func(count+1)#递推调用函数funcfunc(0)
使用递归的例子:
#递归实现计算阶乘
def comput(n):if n in [1,0]:return 1else:return comput(n-1)*na=input()
if a.isdigit():print(comput(int(a)))
二、函数式
1.匿名函数
匿名函数:没有绑定名字的下场是用一次就回收了
res=(lambda x,y:x+y)(1,2)
上述代码中的lambda表示匿名函数,x,y表示匿名函数的变量,:后的x+y表示匿名函数的计算过程,匿名函数加上(1,2)表示调用匿名函数并传递参数,返回值赋给res变量。
若只写res=lambda x,y:x+y 表示将匿名函数的函数地址传给res变量,只需res(1,2)就可以调用刚刚的匿名函数并返回计算结果。
2.max/min函数
以max函数为例,max(iterable,key)
max的工作原理:首先将可迭代对象(iterable)变成迭代器。每次去一个迭代器的值当作参数传给key指定的函数,然后将该函数的返回值当作判断依据,最后返回值最大的那个。(后面介绍的函数具体工作原理和max相似,下面不在展开介绍了)
#比较列表中元组的第二个元素
a=[(3,5),(1,10),(8,4)]
print(max(a, key=lambda x: x[1]))
<<<(1,10)
3.sorted函数
sorted(iterable,reverse,key)将可迭代对象中的值按key函数规则排序,reverse为True表示降序,为False表示升序,默认为False
#按列表中元组的第二个元素升序排序
a=[(4,2),(9,0),(2,1)]
b=sorted(a,key=lambda x:x[1])
print(b)
<<<[(9, 0), (2, 1), (4, 2)]
4.map函数
map(key,iterable)将可迭代对象按key函数处理并返回处理后的map对象
#求平方
a=[1,2,3]
b=list(map(lambda x:x**2,a))
print(b)
<<<[1,4,9]
map中也可以传入多个可迭代对象
#求和
a=[1,2,3]
b=[4,5,6]
c=list(map(lambda x,y:x+y,a,b))
print(c)
<<<[5, 7, 9]
5.reduce函数
reduce(key,sequence,default)将可迭代对象中的值按key函数要求进行合并操作并加上default
from functools import reduce
res=reduce(lambda x,y:x+y+3,[1,2,3],100)
print(res)
<<<115
6.filter函数
filter(key,iterable)将可迭代对象中的值按key函数的要求进行过滤,返回过滤以后的filter对象
a=[1,2,3]
b=filter(lambda x:x>2,a)
print(list(b))
<<<[3]
三、其他函数
1.bytes
bytes函数用于存放二进制字符
res=bytes('你好',encoding='utf-8')
print(res)
<<<b'\xe4\xbd\xa0\xe5\xa5\xbd'
2.eval
eval函数可以用于取出字符串中的值,也可用于运行字符串中的代码
a='1'
b=eval(a)
print(type(b))
<<< <class 'int'>a='print(111)'
eval(a)
<<<111
3.round
round函数表示四舍五入
#四舍五入
a=3.5
print(round(a))
<<<4#向下取整
a=3.3
print(int(a))
<<<3#向上取整
import math
a=3.3
print(math.ceil(a))
<<<4
4.sum
sum(iterable,default)将可迭代对象中的值求和并加上default
a=[1,2,3,4]
print(sum(a,10))
<<<20
5.import
__import__函数可以以字符串的方式导入模块
a=__import__('time')
a.sleep(2)
6.zip
zip函数可以将多个可迭代对象合为元组
list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']
list3 = [True, False, True]z = zip(list1, list2, list3)
z = list(z)
print(z)
<<<[(1, 'a', True), (2, 'b', False), (3, 'c', True)]
7.不常用的一些函数
abs表示去绝对值
all/any表示查看可迭代对象的元素是否全为True/存在True,是则返回True,否则返回False
callable函数表示查看对象是否可以调用
frozenset({1,2,3}) 表示创建不可变集合
hash函数表示返回对象的hash值,只有不可变对象才可hashable