在Python中mul(2)(3)
意味着使用参数2调用mul,然后从带有参数3的值中调用{}值(假设它是一个函数)。您不能重新定义该语法,但您可以让您的函数使用它:
^{pr2}$
为了允许链接(即mul (2)(3)(4)),我会选择class:import operator
class op(object):
def __init__(self, op, arg):
self.op = op
self.value = self._get_val(arg)
def _get_val(self, arg):
try:
return arg.value
except AttributeError:
return arg
def __repr__(self):
return str(self.value)
def __call__(self, arg):
self.value = self.op(self.value,
self._get_val(arg))
return self
def __getitem__(self, key):
self.value = self.op(self.value,
-1 * self._get_val(key))
return self
class mul(op):
def __init__(self, arg):
super(mul, self).__init__(operator.mul, arg)
我添加了一个额外功能,方括号使参数为负(mul(2)[3] == -6)。这只不过是把假装成return一个数字;我把实现其余必要的magic methods留给读者作为练习。在
您不能让mul>x>y执行除返回x > y(True或{})以外的任何操作,因为函数对象{}的计算结果将大于任何整数。在