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)

 

 

 

posted @ 2018-06-14 19:55  Marcki  阅读(176)  评论(0编辑  收藏  举报