Python-函数进阶

python学习网 2021-03-13 18:10:02

递归函数

递归函数:在函数调用函数自身,我们把这样的函数叫做递归函数
递归边界:退出递归的终止条件
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)不会改变被传入的数据或者其他数据(全局变量)
  • 不管在什么时候调用,传入的参数相同,返回的结果就一定是一样的
3、函数的副作用
副作用是指函数被调用,完成了函数既定的计算任务,但同时因为访问了外部数据,尤其是因为对外部数据进行了写操作,从而一定程度的改变了系统环境
案列说明:
# 函数fun1返回的结果为两个参数相加的结果
def fun1(a, b):
    return a + b

python中的内置函数

常用的内置函数
  • 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]

 

阅读(2391) 评论(0)