gpt4 book ai didi

python - 为什么 python 没有 attrsetter(制作一个需要什么)?

转载 作者:太空狗 更新时间:2023-10-30 00:02:41 24 4
gpt4 key购买 nike

operator 提供 attrgetter 来创建一个从对象中检索字段的函数。

为什么这不包含在 operator 中(或标准库中的其他地方)?

def attrsetter(name):
def setter( obj, val):
setattr(obj, name, val)
return setter

我能想到的唯一原因是,在某些极端情况下,这种直接的方法会失效。在这种情况下,这些边缘情况是什么,以便我可以 try catch /避免它们?

最佳答案

attrgetter 旨在用于需要函数替代 lambda 的地方。例如:

# equivalent
heads = map(attrgetter('head'), objs)
heads = map(lambda o: o.head, objs)

换句话说,attrgetter 的目的是创建一个无副作用的函数,该函数返回一个有用的值,并且可以在需要函数的表达式中使用。另一方面,attrsetter 只会产生副作用,并且需要按照 Python 约定返回 None。由于 attrsetter 作为 map 和类似的参数根本没有用,因此未提供。如果您需要 attrsetter,只需编写一个普通的 for 循环即可。

另请注意,使用列表推导式可以更好地表达上述两个习语:

heads = [o.head for o in objs]

attrgetter 很少被需要,一旦它是 decided 就失去了很多吸引力lambda 毕竟不会从 Python 3 中删除。

关于python - 为什么 python 没有 attrsetter(制作一个需要什么)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27569107/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com