美文网首页
python lambda

python lambda

作者: 逗比的一生 | 来源:发表于2019-10-21 16:53 被阅读0次

    lambda 定义了一个匿名函数
    lambda 并不会带来程序运行效率的提高,只会使代码更简洁。
    如果可以使用for...in...if来完成的,坚决不用lambda。
    如果使用lambda,lambda内不要包含循环,如果有,我宁愿定义函数来完成,使代码获得可重用性和更好的可读性。
    原文链接

    • tips:
      operator.itemgetter() 有时候也可以用lambda表达式代替,比如:
    >>> rows = [ {'fname': 'Brian', 'lname': 'Jones', 'uid': 1003}, {'fname': 'David', 'lname': 'Beazley', 'uid': 1002}, {'fname': 'John', 'lname': 'Cleese', 'uid': 1001}, {'fname': 'Big', 'lname': 'Jones', 'uid': 1004} ]
    >>> from operator import itemgetter
    >>> rows_by_fname = sorted(rows, key=itemgetter('fname'))
    >>> print(rows_by_fname)
    [{'fname': 'Big', 'lname': 'Jones', 'uid': 1004}, {'fname': 'Brian', 'lname': 'Jones', 'uid': 1003}, {'fname': 'David', 'lname': 'Beazley', 'uid': 1002}, {'fname': 'John', 'lname': 'Cleese', 'uid': 1001}]
    >>> rows_by_fname2 = sorted(rows,key=lambda r: r['fname'])
    >>> print(rows_by_fname2)
    [{'fname': 'Big', 'lname': 'Jones', 'uid': 1004}, {'fname': 'Brian', 'lname': 'Jones', 'uid': 1003}, {'fname': 'David', 'lname': 'Beazley', 'uid': 1002}, {'fname': 'John', 'lname': 'Cleese', 'uid': 1001}]
    

    此处使用lambda会比itemgetter()运行更快一些

    • 比较不支持原生比较的对象
    >>> class User:
        def __init__(self,user_id):
            self.user_id = user_id
        def __repr__(self):
            return 'User({})'.format(self.user_id)
    
        
    >>> def sorr_notcpmpare():
        users = [User(23),User(3),User(99)]
        print(users)
        print(sorted(users,key=lambda u: u.user_id))
    
        
    >>> sorr_notcpmpare()
    [User(23), User(3), User(99)]
    [User(3), User(23), User(99)]
    

    operator.attrgetter() 来代替lambda函数

    >>> from operator import attrgetter
    >>> class User:
        def __init__(self,user_id):
            self.user_id = user_id
        def __repr__(self):
            return 'User({})'.format(self.user_id)
    
    >>> def sort_notcompare():
        users = [User(23), User(3), User(99)]
        print(users)
        print(sorted(users,key=attrgetter('user_id')))
    
    
    >>> sort_notcompare()
    [User(23), User(3), User(99)]
    [User(3), User(23), User(99)]
    

    此处,使用attrgetter()比lambda运行更快

    相关文章

      网友评论

          本文标题:python lambda

          本文链接:https://www.haomeiwen.com/subject/kycbuctx.html