IT Share you

Python / IPython 인터프리터에서 단일 밑줄 _에 값 할당

shareyou 2020. 11. 7. 17:57
반응형

Python / IPython 인터프리터에서 단일 밑줄 _에 값 할당


이 함수는 Python 2.7에서 ipython다음 같이 만들었습니다 .

def _(v):
    return v

나중에 전화 _(somevalue)하면 _ = somevalue.

in[3]: _(3)
out[3]: 3
in[4]: print _
out[4]: 3

기능이 사라졌습니다! 전화 _(4)하면 다음을받습니다.

TypeError: 'int' object is not callable`

왜? 이 기능의 문제점은 무엇입니까?


Python 인터프리터는 마지막 표현식 값을에 할당합니다 _.

이 동작은 REPL 인터프리터 로만 제한 되며 대화식 코딩 세션을 지원하기위한 것입니다.

>>> import math
>>> math.pow(3.0, 5)
243.0
>>> result = _
>>> result
243.0

표준 파이썬 인터프리터는 사용자 정의 값 생각에하지 짓밟 몇 가지 길이로 간다; 자신이 다른 것을 할당 _하면 인터프리터는이를 덮어 쓰지 않습니다 (기술적으로 말하면 _변수는 __builtin__속성 이고 자신의 할당은 '일반'전역입니다). 하지만 표준 Python 인터프리터를 사용하고 있지 않습니다. 당신은 IPython을 사용하고 있으며 그 인터프리터는 그렇게 조심하지 않습니다.

IPython 은이 동작을 명시 적으로 문서화합니다 .

다음 GLOBAL 변수는 항상 존재합니다 (덮어 쓰지 마십시오!).

  • [_] (단일 밑줄) : Python의 기본 인터프리터와 같은 이전 출력을 저장합니다.

[...]

표준 Python REPL 환경에서 무언가를 할당 한 경우 _에도 이를 다시 숨기는 전역 ( )을 통해 __builtins__._또는 삭제하여 마지막 표현식 결과에 액세스 할 수 있습니다 ._del _

파이썬 인터프리터 외부에서는 _관례 상 번역 가능한 텍스트 함수의 이름으로 사용됩니다 ( gettext모듈 참조 ; 외부 도구는 번역 가능한 문자열을 추출하기 위해 해당 함수를 찾습니다).

또한 규칙에 _따라 할당 대상으로 사용 하면 해당 값을 무시할 것임을 코드 독자에게 알립니다. [random.random() for _ in range(5)]들어 5 개의 임의의 float 값 목록을 생성하거나 foo, bar, _ = three_values튜플 할당에서 세 번째 값을 신호하는 데는 사용되지 않습니다. 때는 _이미 사용되는 gettext기능, __동일한 목적을 위해 사용될 수있다.


_인터프리터의 특수 변수이며 항상 이전 표현식의 결과에 할당됩니다. 그래서, 당신은 그렇게 사용하지 마십시오.

BTW 문제는 IPython 쉘과 관련된 것으로 보입니다. 코드가 일반 파이썬 쉘에서 잘 작동하기 때문입니다.

일반적인 파이썬 셸에서 변수에 아무것도 _할당하면 해당 객체에만 할당 된 상태로 유지되고 특수 동작이 느슨해집니다.


Python 셸 :

>>> 2*2
4
>>> _         #works as expected
4
>>> _ = 2     #after assignment, it's magic functionality is gone
>>> _*5       
10
>>> _
2

IPython 쉘 :

IPython에서 _파이썬 쉘과 다르게 동작합니다 _; 일부 변수에 할당하더라도 계산을 수행하는 즉시 업데이트됩니다.

In [1]: 2*2
Out[1]: 4

In [2]: _
Out[2]: 4

In [3]: _ = 10

In [4]: _*10
Out[4]: 100

In [5]: _
Out[5]: 100

IPython의 문서에서 :

다음 GLOBAL 변수는 항상 존재합니다 (덮어 쓰지 마십시오!).

_ : (단일 밑줄) : Python의 기본 인터프리터와 같은 이전 출력을 저장합니다. ..

파이썬 문서에서 :

특수 식별자 _는 대화 형 인터프리터에서 마지막 평가 결과를 저장하는 데 사용됩니다. __builtin__모듈에 저장됩니다 . 대화 형 모드 _가 아닌 경우 특별한 의미가 없으며 정의되지 않습니다.

Note: The name _ is often used in conjunction with internationalization; refer to the documentation for the gettext module for more information on this convention.


If you create a variable assigned to "_" it gets masked/masks the system variable _.

참고URL : https://stackoverflow.com/questions/17580289/assigning-a-value-to-single-underscore-in-python-ipython-interpreter

반응형