Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/104.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_Metaprogramming_Magic Methods - Fatal编程技术网

在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

我正试图用Python创建一个模块,它允许我编写一个有效的句子,比如
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-我已经这么做了。。。享受你的项目的乐趣。。。