python内置自定义函数_Python中内置类型的自定义比较函数

假设你有这样的课程:class Thingy(object):

def __init__(self, key, notkey):

self.key, self.notkey = key, notkey

def __eq__(self, other):

return self.key == other.key

def __hash__(self):

return hash(self.key)

现在,您想把这些放在一个集合中,但是用notkey而不是key键控。{cd3}的意思是一致的。所以,创建一个包装:

^{pr2}$

你可以把这些放在一组里:wts = set(WrappedThingy(thingy) for thingy in thingies)

例如,假设您想取消验证您的东西,为每个notkey值保留一个thingy(任意)。只需将它们包装起来,将包装纸粘在一组中,然后将它们展开并将其粘贴在一个列表中:wts = set(WrappedThingy(thingy) for thingy in thingies)

thingies = [wt.thingy for wt in wts]

这是更通用的Python模式的一部分,称为“DSU”。这是“decorate-sort-undecorate”的意思,现在这是非常不准确的,因为在现代Python中,你几乎从不需要它来排序相关的任务……但从历史上看,它是有意义的。你可以随意称之为“装修过程中不装饰”,希望它会流行起来,但不要希望太难。在

现在排序不需要DSU的原因是大多数排序函数都将key函数作为参数。事实上,即使是为了不求证,^{} recipes中的unique_everseen函数也需要一个key。在

但如果你看看它在幕后的作用,它基本上就是DSU:for element in iterable:

k = key(element)

if k not in seen:

seen.add(k)

yield element

(事实上,它是一个生成器而不是一个列表构建函数,这意味着它可以“动态地取消装饰”,这使得事情变得简单一些。但除此之外,同样的想法。)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值