• python 函数递归与匿名函数


    1、什么是函数递归?

    函数递归调用(是一种特殊的嵌套调用):在调用的函数过程中,又直接或者间接的调用了该函数本身

    递归必须要有两个明确的阶段:

    递推:一层一层递归调用下去,强调每进入下一层递归问题的规模都必须有所减少;

    回溯:递归必须要有一个明确的结束条件,在满足该条件时结束递推,开始一层层回溯

    递归的精髓在于通过不断的重复逼近一个最终的结果

    2、怎么用?

    # import sys
    # print(sys.getrecursionlimit()) #改递归深度
    # sys.setrecursionlimit(3000)
    # def foo(n):
    # print('from foo',n)
    # foo(n+1)
    # foo(0)

    def foo(n):
    if n ==1:
    return 10
    return foo(n-1)+2
    print(foo(5))

    a =[1,[2,[3,[4,[5,[6,[7,[8,[9,]]]]]]]]]
    def tell(a):
    for x in a:
    if type(x) is list:
    tell(x)
    else :
    print(x)
    print(tell(a))

    3、二分法
    #二分法
    nums=[1,3,7,11,22,34,55,78,111,115,137,149,246,371]
    def search(search_num,nums): #传两个参数,一个列表,一个是被检测元素
    print(nums)
    if len(nums) == 0: #如果是空列表,就没有
    print('not exists')
    return
    mid_index=len(nums) // 2 #取中间的索引值,进而取得所对应的值
    if search_num > nums[mid_index]: #判断被检测的元素如果大于列表的中间值
    # in the right
    nums=nums[mid_index+1:] #截断列表,保留大于中间值的那一段 (从中间值加一的那个值开始,到最后)
    search(search_num,nums)
    elif search_num < nums[mid_index]: #判断被检测的元素如果小于列表的中间值
    # in the left
    nums=nums[:mid_index] #截断列表,保留小于中间值的那一段列表
    search(search_num,nums)
    else:
    print('find it')

    search(34,nums)
    4、匿名函数
    没有绑定名字用一次就回收了
    #有名函数
    def fun(x,y):
    return x+y
    fun(1,2)
    #匿名函数格式
    res = (lambda x,y: x+y)(1,2)
    print(res)
    5、内置函数
    #max函数应用
    salaries={
    'egon':3000,
    'alex':100000000,
    'wupeiqi':10000,
    'yuanhao':2000
    }
    #取工资最高的人名
    #max 工资原理
    #首先将salaries由可迭代对象变成迭代器对象,通过next方法将迭代器对象取出的值依次传给key指定的函数
    #然后将该函数的返回值当作判断依据
    def func(k):
    return salaries [k]
    print(max(salaries,key = func)) #有参数名方法
    print(max( salaries, key=lambda k:salaries[k])) #无参数名方法

    # 函数sorted
    # l=[10,1,3,-9,22]
    # print(sorted(l)) #从小到大排序
    # l1=sorted(l,reverse=True ) #从大到小排序
    # print(l1)
    salaries={
    'egon':3000,
    'alex':100000000,
    'wupeiqi':10000,
    'yuanhao':2000
    }
    def func(x):
    return (salaries[x])
    print(sorted(salaries,key=func ,reverse=True ) )

    # print(sorted(salaries ,key=lambda k:salaries[k]) ) #工资从小到大
    # print(sorted(salaries ,key=lambda x:salaries[x] ,reverse=True)) #工资从小到大


    # map 函数
    #将可迭代对象a,变成迭代器对象,通过next方法依次取值,将值做为参数传给指定的函数,函数的返回值就是结果之一
    # a =['ffr','ggg','uuu','dfgb']
    # a1 =map(lambda x:x+'cc', a)
    # print(list(a1))

    # filter() 函数 用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。
    #将可迭代对象变成迭代器对象,用next 方法依次取值,将值作为参数传给指定的函数,
    # filter会判断函数的返回值真假,如果为真留下相应的值

    names=['alexSB','egon','wxxSB','OLDBOYSB']
    # print([x  for x in names  if x.endswith('SB')]) #列表生成式
    names1=filter( lambda x: x.endswith('SB'), names)
    print(list(names1))


















  • 相关阅读:
    UNIX环境C
    UINX标准C
    centOS 部署服务器(三)
    centOS 部署服务器(二)
    centOS 部署服务器(一)
    mysql数据库的还原及常见问题解决
    tomcat启动报错java.lang.OutOfMemoryError:PermGen space解决办法
    mysql 使用service mysqld start 提示未识别服务 进入/etc/rc.d/init.d 下面未发现有mysqld解决方法
    数据库表修复问题
    Ubuntu系统图形化界面无法登录到root用户的解决方法
  • 原文地址:https://www.cnblogs.com/quqinchao/p/9184172.html
Copyright © 2020-2023  润新知