2024-09-21 11:32:45 发布
网友
我是从javascript的背景来学习python的。在JS中,我们可以进行数组方法链接,这非常棒(尤其是使用arrow函数):
someArray .filter(x => x.count > 10) .sort((a, b) => a.count - b.count) .map(x => x.name)
在python中是否可以实现类似数组方法的链接?如果不可能,那么为什么不能呢?在
您可以进行方法链接,但内置list类型不支持作为方法请求的操作(例如map是一个内置)。@就你在例子中给出的操作而言,Felix的完美答案在我看来是正确的。如果你想链接方法,只需要每个方法返回一个实现下一个方法的对象。在
list
map
简单示例:
list("234").copy( # Copy once ).copy( # Twice ).append("Dog" # Returns None, so we can't continue chaining ).copy( # AttributeError because None has no method "copy" )
在Python中,可以执行以下操作:
from operator import attrgetter map(lambda x: x.name, sorted(filter(lambda x: x.count > 10, someArray), key=attrgetter("count"))
语法稍有不同,但基本上应该是相同的。这能回答你的问题吗?在
编辑
如果您真的想要一个更像“链”的语法,可以看看^{}。从他们的docs:
编辑2
感谢@mpium建议PyFunctional,它的语法似乎更酷:
PyFunctional
from functional import seq seq(1, 2, 3, 4)\ .map(lambda x: x * 2)\ .filter(lambda x: x > 4)\ .reduce(lambda x, y: x + y) # 14
在python中,您可以执行类似于数据管道的操作(这与方法链接正好相反…):
a1 = (item for item in someArray if item.count > 10) a2 = sorted(a1, key=lambda x: x.count) a3 = [item.name for item in a2]
注意,a1是一个生成器表达式(而不是list);它不存储元素,而是动态生成它们。在
a1
当然,你可以把它们串在一起(这对我来说不太可读):
请注意,在python中,方法通常会更改实例(例如list.sort())以返回None。所以简单的方法链接对list不起作用。在
list.sort()
None
如果您使用一个为这些函数返回self的库,那么方法链接将起作用。在
self
您可以进行方法链接,但内置
list
类型不支持作为方法请求的操作(例如map
是一个内置)。@就你在例子中给出的操作而言,Felix的完美答案在我看来是正确的。如果你想链接方法,只需要每个方法返回一个实现下一个方法的对象。在简单示例:
在Python中,可以执行以下操作:
语法稍有不同,但基本上应该是相同的。这能回答你的问题吗?在
编辑
如果您真的想要一个更像“链”的语法,可以看看^{} 。从他们的docs:
^{pr2}$编辑2
感谢@mpium建议
PyFunctional
,它的语法似乎更酷:在python中,您可以执行类似于数据管道的操作(这与方法链接正好相反…):
注意,
a1
是一个生成器表达式(而不是list
);它不存储元素,而是动态生成它们。在当然,你可以把它们串在一起(这对我来说不太可读):
^{pr2}$请注意,在python中,方法通常会更改实例(例如
list.sort()
)以返回None
。所以简单的方法链接对list
不起作用。在如果您使用一个为这些函数返回
self
的库,那么方法链接将起作用。在相关问题 更多 >
编程相关推荐