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 _.
'IT Share you' 카테고리의 다른 글
내 애플리케이션에서 Android가 선택한 레이아웃을 어떻게 감지 할 수 있습니까? (0) | 2020.11.07 |
---|---|
MVC 4 API 경로를 어떻게 디버깅합니까? (0) | 2020.11.07 |
라 라벨 5.0 설치 방법 (0) | 2020.11.07 |
spring-boot 및 angularjs가 작동하지 않는 CORS (0) | 2020.11.07 |
conda 만들기에 대한 새 환경 위치를 지정하는 방법 (0) | 2020.11.07 |