python toolz-组合方法(与函数相反)
在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
我所说的更好是指可读性和类似的性能 以下是一个微不足道的例子:
# 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
协议覆盖您的类和实例创建;阅读相关内容,它很有趣,并揭示。