我正在尝试创建一个Python模块,使我能够像map(_ + 2, range(10))
这样编写有效的语句,只是为了好玩,但有一种奇怪的行为我不知道如何处理。我当前的实现方式是:
class EasyLambda(object):
def __add__(self, other):
return lambda val: val + other
_ = EasyLambda()
每个运算符都有其自己的功能。这是一个简单的实现,我将稍后改进它,以使诸如
_.lower() + '.html'
的操作成为可能。问题在于,每次调用一个魔法方法时,Python似乎都会用该方法返回的新值替换self,而在本例中这个值是一个 lambda 函数。>>> from mymodule import _
>>> print _
<func.EasyLambda object at 0x2e4ae90>
>>> add2 = _ + 2
>>> print add2, _
<function <lambda> at 0x2e551b8> <func.EasyLambda object at 0x2e13e90>
>>> add2(4)
6
>>> print add2, _
<function <lambda> at 0x2e551b8> 6 # WTF?
>>> print _, type(_)
6 <type 'int'>
>>> _ + 4
10
>>> _
10 # WTF??
>>> 2 + 2
4
>>> _
6 # WTF???
我真的不知道这里发生了什么。我应该如何解决这个问题并使我的_对象
表现正常?
_
被用来存储最后一个计算结果......不要对_
做任何操作 - 只需在 IDLE/交互式提示符中输入2+2
,然后键入_
- 您将获得4。 - Jon Clements