Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 对变量执行一系列操作_Python_Python 3.x_Oop_Functional Programming - Fatal编程技术网

Python 对变量执行一系列操作

Python 对变量执行一系列操作,python,python-3.x,oop,functional-programming,Python,Python 3.x,Oop,Functional Programming,我需要执行我在变量上定义的一系列操作。例如,我有一个变量a,链应该如下所示: a.someAction1(some parameters).someAction2(some parameters).someAction2(some parameters).someAction2(some parameters) 因此这里.someAction1(一些参数)将a作为第一个参数,并执行中定义的一些操作。someAction1(一些参数)。在之后,.someAction2(某些参数)使用.someA

我需要执行我在变量上定义的一系列操作。例如,我有一个变量
a
,链应该如下所示:

a.someAction1(some parameters).someAction2(some parameters).someAction2(some parameters).someAction2(some parameters)
因此这里
.someAction1(一些参数)
a
作为第一个参数,并执行
中定义的一些操作。someAction1(一些参数)
。在
之后,.someAction2(某些参数)
使用
.someAction1(某些参数)
的结果作为第一个参数,并执行
中定义的一些操作。someAction2(某些参数)
依此类推。
变量
a
可以是任何类型(当然,在定义
someActions
之前,我们知道
a
的类型)。实现这一目标的最佳方式是什么?另外,请提供工作示例。

这种类型的链接对于可以应用于对象并返回相同类型的新对象的操作非常有用。例如,我们可以在某些类型上定义一个运算平方,并返回输入的平方(返回是关键,因为链依赖于返回值)。对于模式的一个例子,考虑这个具有平方和平方根的浮点包装。
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
注意现在我们可以做chaineable(4).square().squareRoot()。。。。。依此类推,因为返回类型将始终定义该操作


注意:您不一定需要返回self。它只需要是同一类型的。您还可以有一些相互协作的类型,如果它们具有交互操作,则可以使用此模式。关键是返回结果的一个实例,这样您就可以直接链接函数调用。

任何
a.someAction1
返回的都必须有一个名为
someAction2
的方法。如果所有这些方法都在同一个类中定义,那么它们都必须返回该类的值。最简单的方法是让每个方法只返回
self
@chepner。你能提供一个简单的工作示例来演示你的想法吗?例如
a=2
,现在对其执行
someActions
中定义的一些操作。显示的代码不适用于e等任意对象。g<代码>a=2。您必须以不同的方式编写它。您不能使用此语法调用任意函数
someAction
不是
int
类的属性,因此
(2)。someAction(…)
不起作用。如果您正在寻找嵌套调用的替代方法,如
f(x,g(y,h(z,2))
,那么类似管道的东西可能就是您正在寻找的:
2 |>h$(z)|>g$(y)|>f$(x)
。可以肯定的是,Python本身没有这样的功能。