函数递归、匿名函数、内置函数
一、函数递归
1、什么是函数递归
函数的一种嵌套调用的特殊形式
具体指的是调用函数过程中又调用自己,称之为函数的递归调用
def f1(): #在调用一个函数过程中直接调用自己 print('from f1') f1()
2、为什么用函数递归?
某种情况使用会更方便更简单
import sysprint(sys.getrecursionlimit()) #查看递归层级sys.setrecursionlimit(2000) #改变递归层级
def f1(): #在调用一个函数过程中间接调用自己 print('fi') f2()def f2(): print('f2') f1() f1()
有意义的递归应该是在满足某种条件下可以结束掉
一个递归的过程应该分为两个阶段:
1、回溯:向下一层一层调用
2、递推:向上一层一层返回
举例
def age(n): if n == 1: return 18 return age(n-1) + 10res = age(5) print(res)
递归在什么场景下方便?
递归是用函数实现循环
举例1
nums = [1, [2, [3, [4, [5, [6, [7, [8, ]]]]]]]]def func(nums): for item in nums: if type(item) is list: func(item) else: print(item) func([1, [2, [3, [4, [5, [6, [7, [8, ]]]]]]]])
举例2 找数在不在列表内
nums = [-3, 1, 5, 7, 9, 11, 13, 18, 22, 38, 78, 98] 方法一(效率不高)for num in nums: if num == find_num: print('find it') break方法二(二分法,一种算法高效解决问题方法)def search(find_num, nums): # print(nums) if len(nums) == 0: print('not exists') return mid_index = len(nums) // 2 if find_num > nums[mid_index]: # in the right new_nums = nums[mid_index + 1:] search(find_num, new_nums) elif find_num < nums[mid_index]: # in the left new_nums = nums[:mid_index] search(find_num, new_nums) else: print('find it') search(23, nums)
二、匿名函数
res=(lambda x,y:x+y)(4,5) print(res)
常用用法是和其他函数一起搭配使用
举例(找出字典中薪水最多的人)
salaries = { 'axx':1000000, 'zxx':3000, 'egon':4000, }#介绍max print(max([1,2,3,4])) #max 传可迭代对象def func(k): #只用一次可以用lambda代替 return salaries[k] print(max(salaries,key=func)) #用key可以改变比较依据print(max(salaries,key=lambda k:salaries[k])) print(min(salaries,key=lambda k:salaries[k])) print(sorted(salaries,key=lambda k:salaries[k])) print(sorted(salaries,))
三、内置函数了解
filter #(过滤器)
names = ['egon_nb',"lxx_sb","hxx_sb"] res =(name for name in names if name.endswith('sb')) print(res) res = filter(lambda name:name.endswith('sb'),names) print(res) print(list(res))
map #映现
names = ['egon','lxx','zxx'] res = [name + "vip" for name in names] print(res) res = map(lambda name:name + "vip",names) print(res) print(list(res))
reduce #模块 归纳为
from functools import reduce reduce(lambda x,y:x+y,[1,2,3,4,5,6],100) res = reduce(lambda x,y:x+y,["a","b","c"]) print(res)
©著作权归作者所有:来自51CTO博客作者六个橘子的原创作品,如需转载,请注明出处,否则将追究法律责任