gpt4 book ai didi

python toolz - 组合方法(与函数相反)

转载 作者:行者123 更新时间:2023-11-30 22:24:22 26 4
gpt4 key购买 nike

在 toolz 项目中,有没有办法像函数一样对待对象方法,以便我可以更好地进行组合、柯里化(Currying)等?
我所说的更好是指可读性和类似的性能

这是一个简单的例子:

# given a list strings (names),
l = ["Harry" ,
"Sally " ,
" bEn " ,
" feDDy " ]

# Lets pretend I want to apply a few simple string methods on each item in the
# list (This is just an example), and maybe replace as it's multi-airity.

# Traditional python list comprehension:
print([x.strip().lower().title().replace('H','T') for x in l ])

['Tarry', 'Sally', 'Ben', 'Feddy']

# my attempt, at toolz, same question with compose, curry,
# functools.partial.

from toolz.functoolz import pipe, thread_last
thread_last(l,
(map , str.strip),
(map , str.lower),
(map , str.title),
(map , lambda x: x.replace('H','T')), # any better way to do this?
# I wish i had function/method `str.replace(__init_value__, 'H', 'T')` where the
# `__init_value` is what I guess would go to the str constructor?
list,
print)

我不喜欢所有额外的 lambda...而且我无法想象那会好吗为了性能。关于如何使用 toolz 改进这一点有什么建议吗?

使用operators模块,我可以使大多数运算符(operator)不那么痛苦并省略lambda 用于加法、减法等。

最近版本的Python中的方法调用有类似的东西吗?

最佳答案

请注意,x.replace(y, z) 确实是 str.replace(x, y, z)。您可以使用部分是经常使用的特定替换。

这同样适用于其余方法:如果您通过类访问方法,则该方法是未绑定(bind)的,并且第一个参数 (self) 是函数的普通参数。周围没有魔法。 (实例方法被部分应用,将其 self 值锁定到实例。)

因此,我冒险 thread_last(l, (map, pipeline(str.strip, str.lower, str.title)) 对每个字符串元素应用三个函数。

(如果您喜欢 Python 中的 FP,请查看 http://coconut-lang.org/ )

关于python toolz - 组合方法(与函数相反),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47840467/

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