반응형
with-block 외부에서 사용할 수있는 with-statement로 정의 된 변수?
다음 예를 고려하십시오.
with open('a.txt') as f:
pass
# Is f supposed to be defined here?
나는 PEP-343 아니라 진술에 대한 언어 문서 (2.7)를 읽지 만 내가 말할 수있는 한 그들이 문제에 대해 아무 말도하지 않습니다.
CPython 2.6.5 f
에서는 외부에서 정의 된 것처럼 보이지만 변경 될 수있는 구현 세부 사항에 의존하지 않습니다.
예, 구축 관리자는 문 외부에서 사용할 수 있으며 구현 또는 버전에 없습니까? with 문 은 새 실행 범위를 생성하지 않습니다 .
with
구문 :
with foo as bar:
baz()
거의 설탕입니다 :
try:
bar = foo.__enter__()
baz()
finally:
if foo.__exit__(*sys.exc_info()) and sys.exc_info():
raise
이것은 종종 유용합니다. 예를 들면
import threading
with threading.Lock() as myLock:
frob()
with myLock:
frob_some_more()
온라인 관리자는 두 번 이상 사용할 수 있습니다.
f
파일 인 경우 with
문 밖에 닫혀있는 것으로 보입니다 .
예를 들어,
f = 42
print f
with open('6432134.py') as f:
print f
print f
인쇄합니다 :
42
<open file '6432134.py', mode 'r' at 0x10050fb70>
<closed file '6432134.py', mode 'r' at 0x10050fb70>
PEP-0343 의 : 'with'설명 섹션 에서 사양 을 확인할 수 있습니다 . Python 범위 규칙 ( 짜증나게 할 수 있음 )도 적용 f
됩니다.
주석에서 Heikki의 질문에 답하기 위해 : 예,이 범위 지정 동작은 Python 언어 사양의 일부이며 모든 호환 Python (PyPy, Jython 및 IronPython 포함)에서 작동합니다.
반응형
'ProgramingTip' 카테고리의 다른 글
선언 된 속성에 대한 점 표기법과 메시지 표기법 (0) | 2020.10.05 |
---|---|
C #에서 정적 생성자는 언제 호출? (0) | 2020.10.05 |
mongodb에서 pandas로 데이터를 가져 오는 방법은 무엇입니까? (0) | 2020.10.04 |
애플리케이션이 Linux에서 계속 실행 확인하는 방법 (0) | 2020.10.04 |
jQuery.extend와 jQuery.fn.extend의 차이점은 무엇입니까? (0) | 2020.10.04 |