lamdba匿名幸运飞艇源码函数 sored()函数 filter()函数 map函数() 递归函数

1,lamdba匿名函数:为了幸运飞艇源码开发 QQ2952777280【话仙源码论坛】hxforum.com【木瓜源码论坛】papayabbs.com 解决一下简单的需求而设计的一句话函数,语法: 函数名 = lambda 参数: 返回值

  列如:def func():

      return nn...................................返回的是33

    print(func(3)) ....................................此时打印的结果是:9

    a = func

    a(3).................................................调用函数,并给函数传值

    print(a.name)...............................查看函数的函数名,打印出来的是func

  用lamdba函数写:

    f = lamdba n : n*n................................用 lamdba函数一句话就可以把表达完成

    print(f())..............................................f 里边的小括号放参数,在这里 f 是函数名(其实就是个变量)

  lamdba表示匿名函数,不用def来声明函数,但是变量旁边要价格小括号给匿名函数传值.

扫描二维码关注公众号,回复: 2412374 查看本文章

  ###注意###

    1>函数的参数可以有多个,多个参数之间用,隔开

    2>匿名函数不管多复杂,只能写一行,且逻辑结束后直接返回数据

    3>返回值和正常函数一样,可以是任意数据类型

2,sorted()函数排序函数,语法是:sorted(iterable, key=None, reverse=False)Iterable:是可迭代对象,key:排序规则(排序函数),在sorted内部将可迭代对象中的每一个元素传给这个函数的参数,根据函数运行的结果进行排序.reverse是否为倒序(在这里涉及一个判断)如果reverse= True表示执行倒序,当reverse = False时,表示不执行倒序.要想进行排序,必须得最后处理结果是数字,因为只有数字才能进行排序,否则是字符串什么的不可排序.

  列如:lst = [11,33,55,22,44,99,77,66,55,88]

    def func(lst):.................................................................声明函数func

      return lst.................................................................返回的是一个新的列表

    ll = sorted(lst, key=func, reverse= False)...................正序严格按照语法写

    print(ll)......................................................................此时打印的结果是:[11,22,33,44,55,55,66,77,88,99]

  lamdba的写法:

    ll = (lst, key=lambda i:i, reverse=False)..................调用 lambda函数,默认是正序可以不用写reverse=False,倒序的时候必须写

    print(ll).............................此时打印的结果是:11,22,33,44,55,55,66,77,88,99

3,filter()筛选函数,语法:(function, 条件判断(eg: i : i %2==0), Iterable)

  function是用来筛选函数的,在filter中会自动把元素传递给function,然后根据function返回的True还是False来判断是否保留数据

  列如:lst = [11,22,55,6,,4,33,44,88,7,9,7,5,,4]

    ll = filter(lambda i:i %2 == 0, lst)................................筛选以后形成一个全新的列表

    print(ll)...........................................此时打印的是一个关于filter对象的内存地址:<filter object at 0x000001915BABE240>

    print(list(ll)).............................此时打印的是筛选后的列表:[22,6,4,44,88,4]

  列如:lst = [

        {"id":1, "name":'alex', "age":18},

        {"id":2, "name":'wusir', "age":16},

        {"id":3, "name":'taibai', "age":17}

      ]

    fl = filter(lambda e: e['age'] > 16, lst) # 筛选年年龄⼤大于16的数据

    print(list(fl))..................................出来的还是列表套字典

4,map()映射函数,语法:map(function,Iterable)可以对可迭代对象中的每一个元素进行映射,分别去执行function(函数)  

  列如:lst = [1,2,3,4,5,6]

    ll = map(lambda i: i*i, lst)..................对列表中的每个元素进行自己乘以自己(自己映射自己)

    print(ll).............................................打印出来的是map的内存地址

    print(list(ll))......................................打印出的是:[1, 4, 9, 16, 25, 36],出来的是一个全新的列表

  列如:lst1= [1,2,3]

    lst2= [4,5,6]

    ll = map(lambda x,y:x+y,lst1 lst2)................将2个列表其中的每个元素按相同的索引去相加(体现映射)

    print(ll).........................................................打印出来的还是关于毛的内存地址<map object at 0x000001C35C59E358>

    print(list(ll))......................................此时打印的结果:[5, 7, 9]...........#(形成的还是一个新列表) 

5,递归:自己调用自己,就是递归(神一样的存在,一个包子饿了,把自己给吃了)

  列如:def func(count):

      print(神一样的存在+str(count))

      func(count+1)

    func(1) .....................................................相当于是一个死循环,但是python中最递归997次

  列如:import sys

    sys.setrecursionlimit(10000).................................设置递归权限在10000以内

    def func(count):

      print("神一样的存在"+str(count))

      func(count+1)

    func(1)..............................................................打印结果是前3222项,最多是3222项

  递归可以应用在:各种树形结构,文件夹系统,可以使用递归来遍历.(多用于一分二.二分四,这种联系极强的个体之间.)

  列如:遍历文件夹.

    import osorkspace

    filePath = "d:\sylar\python_workspace"..........................................获取文件的路径实在拿进行的操作

  def read(filePath,n):

    it = os.listdir(filePath)...................................打开文件夹(用it这个变量去接打开的这个文件夹)

    for el in it:.................................................把打开文件夹里的(文件/文件夹)遍历出来

    fp = os.path.join(filePath,el)...................你需要打开每一个母文件夹下的每一个子文件夹,但每一个子文件夹的路径有都不一 样,但是上一个文件夹遍历出来的加到母文件夹后,就是每一个子文件的路径

    if os.path.isdir(fp)...............判断文件夹还是文件(实质还是判断这个文件里边是否还有文件,当此文件中有文件时,则证明这时一个文件夹)

      print("\t"n,el)........................."\t"是缩进n是缩进几次 找规律
      read(fp,n+1)...................................把是文件夹的元素放到函数里边继续打开(递归)递归的入口

    else:

      print("\t"*n,el)....................直到判断打开的都是文件为止,就不在进行操作(也是递归的一个界限和限制,即递归的出口)

  read(filePath,0)

6,二分法:每次能排除掉一般的数据效率较高,但是用二分法必须是有序数列,无序则不好使.

  方法一:算法(实质是找到目标元素在列表的中的位置,并记录查找的次数)

    列如:lst = [11,22,33,44,55,66,77,88,99,123,234,345,456,567,678,789,1111]

      n = 156...............................................................写出目标数

      left = 0...............................................................找到最左边的位置0(把位置定好)

      right = len(lst)-1...............................................找到最右边位置len(lst)-1   

      count = 1...........................................................count是记录查找的次数

      while left <= right:.............................................循环是因为要重复去二分查找目标元素

        middle = (left+right)//2................................这个中间值是时刻在变化的,

        if n > lst[middle]:..........................................判断目标元素是否大于中间位置的元素

          left = middle+1..............如果目标元素大于中间位置元素,则此时的中间元素变成左端的元素,然后再去求中间值

        elif n< lst[middle]:................否则如果目标元素小于中间元素,

          right = middle-1..................此时中间位置的元素想左移动一位

        else:

          print(count).................否则就是找到了,记录总共查找了几次

          print("找到了").....................提示找到了

          print(middle)..........................打印这个目标函数在列表中的位置

          break...............................................此时要跳出循环

      else:

        print("不存在").........................此列表中没有目标元素.

  方法二:递归二分法

    例如:lst = [11,22,33,44,55,66,77,88,99,123,234,345,456,567,678,789,1111]

      def binary_search(left,right,n):..................................定义一个函数,函数的参数是:left,right(n是目标数)

        middle = (left + right) // 2..............................middle是中间数,是通过left和right算出来的(它是跟从left和right变得)

        if left > right:...................................当左边比右边大时,说明目标数没有在列表中

          return -1.........................返回-1表示不在lst中,也有停止调用函数的功能,(-1)表示和输出的其他数据保持一致

        if n > lst[middle]:.......................如果目标数比中间数大,说明目标数在lst的右半部分

          left = middle + 1.........................此时的中间数想右移动一位,即left现在是中间数右移的值

        elif n < lst[middle]:.............................如果目标数比中间值小,说明目标数在;lst的左半部分

          right = middle - 1................此时中间数向左移动一个位置,right就变成此时middle左移的值

        else:

          return middle......................要用return,不能用print,return有停止调用函数的功能

        return binary_search(left,right,n)...............再次调用函数的时候,必须要用return,谁调用而突然就把值返回给谁.**#

      binary_search(left,right,n).....................打印返回的值

猜你喜欢

转载自blog.51cto.com/13890861/2151204