我需要执行我在变量上定义的一系列动作。例如,我有变量from collections import Counter
test['BOW'] = test['tokenize'].apply(lambda x: Counter(x.split(" ")))
print(test['BOW'])
,该链应如下所示:
a
因此,这里a.someAction1(some parameters).someAction2(some parameters).someAction2(some parameters).someAction2(some parameters)
将.someAction1(some parameters)
作为第一个参数,并执行a
中定义的一些动作。在.someAction1(some parameters)
之后,将.someAction2(some parameters)
的结果用作第一个参数并执行在.someAction1(some parameters)
中定义的某些操作,依此类推。
变量.someAction2(some parameters)
可以是任何类型(当然,在定义a
之前我们知道a
的类型)。做到这一点的最佳方法是什么?还请提供工作示例。
答案 0 :(得分:1)
这种类型的链接对于可应用于对象并返回相同类型的新对象的操作很有用。例如,我们可以在某种类型上定义一个运算平方并返回输入的平方(返回是关键,因为链依赖于返回值)。对于该模式的示例,请考虑使用具有平方根和平方根的float包装器。
class Chainable:
def __init__(self, val):
self.val = val
def square(self):
self.val *= self.val
return self #This is the key line here, by returning self we can make the chain
def squareRoot(self):
self.val = self.val**(1/2)
return self
注意,现在我们可以做Chainable(4).square()。squareRoot().....等等,因为返回类型将始终定义该操作。
注意:您不一定需要返回自己。它只需要是相同的类型。如果它们具有交互操作,则还可以有几种可以相互协作的类型可以使用此模式。关键是返回结果的一个实例,以便您可以直接链接函数调用。