递归函数
递归函数:在函数调用函数自身,我们把这样的函数叫做递归函数
递归边界:退出递归的终止条件
1 # 递归实现阶乘
2 def fun(num):
3 if num == 1 or num == 0:
4 return 1
5 else:
6 return num * fun(num - 1)
纯函数
1、概念:
一个函数的返回结果只依赖于它的参数,并且在执行过程里面没有副作用,我们就把这个函数就叫纯函数。
2、纯函数的3个原则
变量都只在函数作用域内获取,作为函数的参数传入
不会产生副作用(slde effects)不会改变python基础教程被传入的数据或者其他数据(全局变量)
不管在什么时候调用,传入的参数相同,返回的结果就一定是一样的
3、函数的副作用
副作用是指函数被调用,完成了函数既定的计算任务,但同时因为访问了外部数据,尤其是因为对外部数据进行了写操作,从而一定程度的改变了系统环境
案列说明:
# 函数fun1返回的结果为两个参数相加的结果
def fun1(a, b):
return a + b
python中的内置函数
内置函数:https://docs.python.org/zh-cn/3.7/library/functions.html
常用的内置函数
map函数:会根据提供的函数对指定序列做映射
1 # map将可迭代对象中的数据迭代出来,一个一个传到函数中调用,将返回结果放到新的对象中
2 def fun(n):
3 return n * 2
4 li = [1,3,12,4,34]
5 res = map(fun, li)
6 print(list(res)) # 结果 >>>[2,6,24,8,68]
filter函数:函数用于过滤序列
1 # filter 过滤函数 第一参数是函数,第二参数是可迭代对象
2 def fun(n):
3 return n < 10
4 li = [1,3,12,4,532,34]
5 res = filter(fun, li)
6 print(list(res)) # 结果 >>>[1,3,4]
zip函数:函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元祖
1 res = zip([1,2,3],[11,22,33,44],[111,222,333])
2 print(list(res))
3 # 结果 >>>[(1,11,111),(2,22,222),(3,33,333)]
匿名函数
python中有一种特殊的函数,不需要使用def去定义,也不用给函数起名字。用过lambda表达式来定义,这种函数叫匿名函数
复制代码
1 # 匿名函数格式
2 lambda 参数 : 表达式 (返回值)
3
4 # 普通函数
5 def fun1(a):
6 return a * 2
7
8 # 匿名函数适用场景 简单的函数定义(只有一个表达式)
9 res = (lambda a , b : a + b)(1,2) # 结果 >>>3
10
11 li = [1,2,122,322,11,4,6]
12 res2 = filter(lambda x:x<10,li)
13 print(list(res2)) # 结果 >>>[1,2,4,6]
复制代码
偏函数
作用:当函数的参数个数太多,需要简化时,使用functools.partial可以创建一个新的函数,这个新函数可以固定住原函数的部分参数,从而在调用时更简单。
1 # 导入模块
2 from functools import partial
3
4 li1 = [1,2,6,7,32]
5 li2 = [1,2,55,323,12]
6 li3 = [1,3,5,213,532]
7
8 # 通过传入不同的过滤条件去过滤出来我们需要的数据
9 # 获取数据中大于5的数据
10 filter2 = partial(filter, lambda x:x>5)
11 res1 = filter2(li1)
12 res2 = filter2(li2)
13 print(list(res)) # 结果 >>>[6, 7, 32]
14 print(list(res2)) # 结果 >>>[55, 323, 12]
453

被折叠的 条评论
为什么被折叠?



