在Python解释器中,\(下划线)变量的值意外更改
我正试图用Python创建一个模块,它允许我编写一个有效的句子,比如在Python解释器中,\(下划线)变量的值意外更改,python,metaprogramming,magic-methods,Python,Metaprogramming,Magic Methods,我正试图用Python创建一个模块,它允许我编写一个有效的句子,比如map(+2,range(10)),只是为了好玩,但有一个奇怪的行为我不知道如何处理。我目前的做法是: class EasyLambda(object): def __add__(self, other): return lambda val: val + other _ = EasyLambda() 每个操作符都有自己的函数。这是一个愚蠢的实现,稍后我将对其进行改进,使类似..lower()+'.h
map(+2,range(10))
,只是为了好玩,但有一个奇怪的行为我不知道如何处理。我目前的做法是:
class EasyLambda(object):
def __add__(self, other):
return lambda val: val + other
_ = EasyLambda()
每个操作符都有自己的函数。这是一个愚蠢的实现,稍后我将对其进行改进,使类似..lower()+'.html'
的事情成为可能。问题是,每次我调用magic方法时,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???
来自mymodule导入的>>_
>>>印刷品_
>>>add2=U2+2
>>>打印地址2_
>>>增补2(4)
6.
>>>打印地址2_
6#WTF?
>>>打印,键入()
6.
>>> _ + 4
10
>>> _
10#WTF??
>>> 2 + 2
4.
>>> _
6#WTF???
我真的不知道这里发生了什么。如何解决此问题,并使我的
\uuu对象
按预期运行?\uu
由交互式解释器用于存储上次计算的结果。每次你试图做某事时,你都不经意地把你的\uu
写过头了。还要注意,\uu
经常被用作uggettext
和类似内容的快捷方式。最简单的解决办法是暂时避免使用。
感谢您指出的相关章节,其中指出:
在交互式口译员中使用特殊标识符u来存储最后一次评估的结果;它存储在\uuuuu内置\uuuu
模块中。当不处于交互模式时,\u
没有特殊含义,也没有定义。请参阅导入语句的第节
注:名称\uu
通常与国际化结合使用;有关此约定的更多信息,请参阅gettext
模块的文档
在shell中,
\uu
用于存储上次计算的结果。。。。。不要对你的
做任何事情-只需将2+2
放在空闲/交互式提示符中,然后键入
-你将得到4Dear lord--“我将在交互式shell之外再次测试并编辑我的测试,它通常用作ugettext和本地化的shorcut名称…”。。。我认为最简单的事情是避免用这个名字开头:)它不是为了严肃的用途,只是为了好玩,但是谢谢你的建议=DOkay-我已经这么做了。。。享受你的项目的乐趣。。。