小编Rem*_*ius的帖子

如何通过使用lambda或函数从列表中获取比较值来获取列表中的最小值/最大值?

在Python中,我想使用lambda在列表中找到max元素进行比较.

这段代码没有成功:

# An 'anonymous' object, like JSON object. Use like: Mock(name='Bob', age=30)
class Mock(object):
    def __init__(self, **kwargs):
        self.__dict__.update(kwargs)

items = [
    Mock(cost=10, quantity=1),
    Mock(cost=15, quantity=3),
    Mock(cost=20, quantity=5),
    Mock(cost=100, quantity=2)
]

index, value = max(items, key=lambda(item) : item.cost * item.quantity)
print('$%d, q=%d' % (value.cost, value.quantity))
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

    index, value = max(items, key=lambda(item) : item.cost * item.quantity)
TypeError: 'Mock' object is not iterable
Run Code Online (Sandbox Code Playgroud)

我该如何正确实现?

python collections lambda max python-2.7

3
推荐指数
2
解决办法
6523
查看次数

为什么裸 Python 装饰器(没有 @)不会产生编译器错误?

只是一个错误输入:我忘记在属性装饰器之前添加 @。花了大约 1 小时才找出出了什么问题。下面是一个例子:

class Woo(object):
    @property
    def success(self):
        return True

    property
    def failure(self):
        return False

if __name__ == '__main__':
    woo = Woo()
    print(f'success={woo.success}')
    print(f'failure={woo.failure}')
    print(f'It\'s fine to call failure()={woo.failure()}')
Run Code Online (Sandbox Code Playgroud)

结果是:

success=True
failure=<bound method Woo.failure of <__main__.Woo object at 0x0000016050D4F6D8>>
It's fine to call failure()=False
Run Code Online (Sandbox Code Playgroud)

我想知道为什么 Python 编译器允许在语法中使用“裸装饰器”(例如,没有装饰器前缀 @ 的属性)以及它在语义上的含义。

python python-3.x

2
推荐指数
2
解决办法
168
查看次数

标签 统计

python ×2

collections ×1

lambda ×1

max ×1

python-2.7 ×1

python-3.x ×1