2 回答
TA贡献1776条经验 获得超12个赞
就个人而言,我只是使用带括号的“本机”Python 方式,其中一个Chain
类用于__getattr__
提供范围内定义的任何函数globals
。
class Chain:
def __init__(self, val):
self.val = val
def __getattr__(self, f):
return lambda: Chain(globals()[f](self.val))
def upper(s):
return s.upper()
def pad(s):
return "abc" + s + "xyz"
def swap(s):
return s.swapcase()
print(Chain("foo").upper().pad().swap().val)
# ABCfooXYZ
或者使用partialandreduce来创建一个compose函数(虽然我觉得这样的东西应该已经存在了):
from functools import reduce, partial
def compose(*fs):
return partial(reduce, lambda x, f: f(x), fs)
print(compose(upper, pad, swap)("foo"))
TA贡献1719条经验 获得超6个赞
您可以尝试以下几个选项。一种是编写您自己的带有函数和参数的“应用”。
def apply_functions(functions, arg):
for fctn in functions:
arg = fctn(arg)
return arg
result = apply_functions((charOk, removeRepChar, stringToList,
removeStopWords), x)
另一种方法是将您的函数放入一个类中并使用方法链接。您已经有返回值的函数,只需 returnself即可。
class Foo:
def __init__(self, df):
self.df = df
def charOk(self):
# do the operation
return self
def removeRepChar(self):
# do the operation
return self
etc...
result = Foo(x).charOk().removeRepChar().stringToList().removeStopWords()
添加回答
举报