파이썬으로 모듈을 만들려고합니다. map(_ + 2, range(10))
과 같은 유효한 문장을 재미있게 쓸 수 있지만, 모르는 이상한 행동이 있습니다 어떻게 대처할 것인가. 현재 구현은 다음과 같습니다._ (밑줄) 변수의 값이 Python 인터프리터에서 예기치 않게 변경됩니다.
class EasyLambda(object):
def __add__(self, other):
return lambda val: val + other
_ = EasyLambda()
각 연산자에는 이와 같은 자체 기능이 있습니다. 이것은 벙어리 구현이며 나중에 _.lower() + '.html'
과 같은 것을 가능하게하기 위해 개선 할 것입니다. 문제는, 매직 메소드를 호출 할 때마다 파이썬은 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???
나는 여기에 무슨 일이 일어나고 있는지 전혀 모른다. 이 문제를 해결하고 내 _ object
이 예상대로 작동하도록하려면 어떻게해야합니까?
쉘 안에서'_'는 마지막으로 평가 한 결과를 저장하는 데 사용됩니다 .....'_'을 사용하지 마십시오. IDLE/대화식 프롬프트에'2 + 2'를 넣으면됩니다. '_'을 입력하십시오. 4 –
친애하는 영주 -'다시 테스트하고 내 테스트를 편집합니다. –
대화 형 쉘 외부에서는 일반적으로 ugettext 및 현지화를위한 shorcut 이름으로 사용됩니다 ... 가장 단순하다고 생각합니다. 문제는 그 이름을 다음과 같이 사용하는 것을 피하는 것입니다. –