一、函数递归
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 reducereduce(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博客作者六个橘子的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 20201112 装饰器之函数即变量
  2. 20201203 函数式编程与函数不同
  3. 20201203 高阶函数
  4. 干货丨DolphinDB通用计算教程
  5. python入门之 字典算法实现及操作
  6. DolphinDB脚本语言的混合范式编程
  7. 闭包函数及其应用
  8. 函数-对象、嵌套、名称空间与作用域
  9. 函数的递归

随机推荐

  1. Enum扩展特性实例代码
  2. C#中关于扩展方法的实例分析
  3. 详细介绍一个.net开源权限管理系统
  4. 总结一些编码和设计原则实例
  5. C#中如何格式化json字符串的方法分析
  6. ASP.NET Core 应用程序发布命令实例
  7. 分享在C#中时间戳是怎么转换的?
  8. 如何使用C#来制作扫雷游戏的图文代码教程
  9. winform 信息管理系统图文实例
  10. C#开发中遇到的问题分享