zoukankan      html  css  js  c++  java
  • python之匿名函数,函数递归

    1.匿名函数

            匿名函数:不用绑定名字,内存地址用一次就回收

          定义:  res=(lambda x,y:x+y)(1,2)

                        f=lambda x,y:x+y

                            print(f) 

                            print(f(1,2))

        #max取最大值 min  sorted 排序  map filter sorted 使用介绍

    salaries={
        'egon':3000,
        'alex':100000000,
        'wupeiqi':10000,
        'yuanhao':2000
    }

    max 的原理                # 取最大值

            1.首先将可迭代对象变成迭代器对象

            2.res=next(可迭代器对象),将res当做参数创给 key指定的函数,然后将函数的返回值当做判断依据返回给max

               例子:def func(k):

                            return salaries[k]

                        print(max(salaries,key=func))   #  max相当于每一次next结果,当做参数传给key后面的函数把得到个返回值交

                                                                                    给max判断

                匿名函数max简化版  print(max(salaerics,key=lambda k:salaries[k] )

    sorted 排序,得到个新列表

                # l=[10,1,3,-9,22]

                # l1=sorted(l,reverse=False)     默认从小到大排序

                     l1=sorted(l,reverse=True)  取反 小大到小排序

                    print(sorted())    

                    print(sorted(salaries,key=lambda k:salaries[k]))    根据key以列表的方式排序

    map的原理

               1.首先将可迭代对象变成迭代器对象

                2.res=next(可迭代器对象),将res当做参数传给第一个参数指定的函数,然后将该函数的返回值当做map的结果之一

                aaa=map(lambda x:x+‘sb’,names)   #  取出names里面的值映射给前面的函数,aaa是个可迭代器对象 next                                                                                         运行

                 print(list(aaa))   #转成列表可以直接全部取出

                # print([name+"_SB" for name in names])                  更上述操作一样

    filter的工作原理   

            1.首先将可迭代对象变成迭代器对象

            2.res=next(可迭代器对象)将res当做单数传给第一个参数指定的函数,让后filter会判断函数的返回值的真假,如果真则留下来

              

    2.函数的递归

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

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

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

                回溯:递归必须有一个明确的结束条件,在满足该条件时解释递推 并且一层一层的回溯

            递归的精髓在于通过不断地重复得到一个最终的结果

    # import sys                                                                调用模块
    # print(sys.getrecursionlimit())                            修改递归传递
    # sys.setrecursionlimit(3000)                                修改递归最大次数

         def age(n): 

                    if n ==1:                             #条件:递归最终的次数

                        return 26                        #递归最终结束的结果

                   return age(n-1)+2               # 每次调用age并减少一次数

      print(age(5))                                     #回溯:根据每次的递归的结果和最终的结果回溯到你最终想要的值

                l=[1[2[3[4[5[6[7[8]]]]]]             递归取值

                def tell(1):

                    for item in l:

                        if type(item) is list:

                            #继续进入下一层递归

                            tell(item)   

                         else:

                               print(item)

    tell(1)

    1.二分法例题

    例题:查找列表指定值

            nums=[1,3,4,5,6,7,8,9,10,11,22,33,,44]

                search_num=8                                    #指定查找8这个数字

            def search(search_num,nums):

                    if len(nums)==0:

                        print('not sxists')

                        return

                    mid_index=len(nums)//2

                    if search_num > nums[mid_index]:

                        nums=nums[mid_index+1:]              #这里为啥加1能  因为上面那个判断条件已经判断该值了

                        search(search_num,nums)        #这里nums通过切分后的新列表

                    elif:search_num < nums[mid_index]:

                            nums=nums[:mid_index]

                             search(search_num,nums)

                    else:

                            print('find it’)

    search(31,nums)

        

    4.内置函数使用方法:

            掌握

               # res='你好'.encode('utf-8')
              # print(res)
    #
                # res=bytes('你好',encoding='utf-8')
                # print(res)

  • 相关阅读:
    一周学C#第五天——命名空间
    一周学C#之第4天——语句
    一周学C#之第一天——基础知识
    数据库ADONET使用强类型DataSet
    .NET中的主要类型简表
    一周学C#第六天——枚举
    一周学C#之第二天(函数)
    一周学C#之第三天——值的类型
    数据库ADONET向数据库提交更新
    一个低级错误导致的StackOverflowException异常
  • 原文地址:https://www.cnblogs.com/Marcki/p/10111961.html
Copyright © 2011-2022 走看看