ProgramingTip

with-block 외부에서 사용할 수있는 with-statement로 정의 된 변수?

bestdevel 2020. 10. 4. 12:05
반응형

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 포함)에서 작동합니다.

참고 URL : https://stackoverflow.com/questions/6432355/variable-defined-with-with-statement-available-outside-of-with-block

반응형