美文网首页
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