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

python toolz-组合方法(与函数相反),python,toolz,Python,Toolz,在toolz项目中,是否有类似于函数的方法来处理对象,这样我就可以更好地编写、修改等等? 我所说的更好是指可读性和类似的性能 以下是一个微不足道的例子: # 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

在toolz项目中,是否有类似于函数的方法来处理对象,这样我就可以更好地编写、修改等等?
我所说的更好是指可读性和类似的性能

以下是一个微不足道的例子:

# 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使其更好,有什么建议吗

有了
操作员
模块,我可以让大多数操作员减轻痛苦并省略 lambdas表示加法、减法等

在python的最新版本中,方法调用有什么相似之处吗?

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

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

因此,我希望最后一个线程(l,(map,pipe(str.strip,str.lower,str.title))对每个字符串元素应用三个函数


(如果您对Python中的FP感兴趣,请看一下)

好吧,您可以直接使用
str.strip
str.lower
等,不需要lambda。所有方法仍然作为类命名空间中的函数对象的属性存在。如果我想执行
''。join()
在名字列表上?我想我想要的是类似于
str.join(\uuu init\ux)这样的函数
或其他…函数/方法接受将被实例化为类标识的内容。仅供参考,使用
replace
函数进行更新,这可能表明当方法调用变得更复杂时,使用起来有点不舒服。所以这就是
self
一直以来所做的…谢谢。我想我只是认为它做到了与构造函数或其他OO语言中的某些东西类似的其他魔法。构造函数(或者更确切地说,
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
用于每个方法。您可以使用
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
协议覆盖您的类和实例创建;阅读相关内容,它很有趣,并揭示。