zoukankan      html  css  js  c++  java
  • python3.x 匿名函数lambda_扩展sort

    #匿名函数
    lambda 参数: 表达式
    关键字 lambda 说明它是一个匿名函数,冒号 : 前面的变量是该匿名函数的参数,冒号后面是函数的返回值,注意这里不需使用 return 关键字。

    • ambda只是一个表达式,函数体比def简单很多。
    • lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
    • lambda函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数。
    • 虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。

    例子:对比cpp来说很简单了

    list_str=['test', None, '', 'str', ' ', 'END']

    data = filter(lambda str:str and len(str.strip())>0, list_str)
    print('data: ', data, 'list(data): ',list(data))
    #为什么filter输出是字符串list

    map_data=map(lambda str:str and len(str.strip())>0, list_str)
    print('map_data:', map_data, 'list(map_data): ', list(map_data))
    #为什么map这边则是bool类型的list

    不过上述存在未知,为什么map返回的不是str还是bool类型的list

    sort:

    cmp在py3.x已经取消了,

    取而代之的是sort/sorted

    Python3.x_FAQ:

    sorted(iterable, key=None, reverse=False)

      reverse是一个布尔值。如果设置为True,列表元素将被倒序排列,默认为False
      key接受一个函数,这个函数只接受一个元素,默认为None
      Key的作用原理

      Python2中的**自定义布尔函数cmp=custom_cmp(x, y)由Python3中的key=custom_key(x)**代替。

      在python3中,待比较元素x通过custom_key函数转化为Python能比较的值custom_key(x),进而再基于返回值进行排序。

    例子:【以下代码会将类实例按照大小升序排序

    '''

    class Person(object):
      def __init__(self):
        self.name=''
      def getName(self):
        return self.name

    p1 = Person()
    p1.name = 'Bart'

    p2 = Person()
    p2.name = 'Adam'

    p3 = Person()
    p3.name = 'Lisa'

    L1 = [p1, p2, p3]
    L1.sort(key = lambda x:x.getName(),reverse=False)#true为降序

    print(L1[0].getName())
    print(L1[1].getName())
    print(L1[2].getName())

    >>>

    Adam
    Bart
    Lisa

    '''

    Python官方FAQ:

    sortediterable*key = Nonereverse = False 

      从iterable的项返回一个新的排序列表

      有两个可选参数,必须指定为关键字参数。

      key指定一个参数的函数,该函数用于从iterable中的每个元素中提取比较键(例如,key=str.lower)。默认值为None(直接比较元素)。

      reverse是一个布尔值。如果设置为True,则列表元素将按照每个比较相反的方式进行 排序

      用functools.cmp_to_key()一个老式的转换CMP功能的 关键功能。

      内置功能保证稳定。如果排序保证不更改比较相等的元素的相对顺序,

      则排序是稳定的 - 这有助于在多个过程中进行排序(例如,按部门排序,然后按工资等级排序)。

    例子:
    L = ['Bart', 'Adam', 'Lisa']
    L2 = sorted(L2,reverse=True) #False升序/True为降序

    >>>

    Lisa
    Bart
    Adam

  • 相关阅读:
    数据库索引(Oracle和Mysql)学习总结
    个人开源Git地址
    关于SQL优化这些你了解吗?
    Java项目排查cpu负载高
    Java Bean与Map之间相互转化的实现
    Maven项目改为spring boot项目的方法
    spring boot从redis取缓存发生java.lang.ClassCastException异常
    MySQL优化之Explain命令解读
    阿里巴巴校招四面经验分享
    HDBS之应用代码优化
  • 原文地址:https://www.cnblogs.com/liuruoqian/p/11309639.html
Copyright © 2011-2022 走看看