본문 바로가기

개발하자

파이썬에서 한 줄에 여러 개의 'with' 문이 중첩된 'with' 문과 같은가요?

반응형

파이썬에서 한 줄에 여러 개의 'with' 문이 중첩된 'with' 문과 같은가요?

이 두 진술서가 동등한가요?

with A() as a, B() as b:
  # do something

with A() as a:
  with B() as b:
    # do something

및 변경 글로벌 변수(여기서는 텐서플로) 모두 에 의해 변경된 사항에 따라 달라지기 때문에 요청합니다. 그래서 두 번째 양식은 사용해도 안전한 것으로 알고 있습니다만, 첫 번째 양식으로 단축하는 것과 동등한가요?




예, 한 줄에 여러 개의 문을 나열하는 것은 다음과 같이 중첩하는 것과 동일합니다:

두 개 이상의 항목이 있는 경우 컨텍스트 관리자는 여러 개의 문이 중첩된 것처럼 처리됩니다:

with A() as a, B() as b:
   suite

와 동등하다

with A() as a:
   with B() as b:
       suite

유사한 언어가 에 표시됩니다.

3.10+용 업데이트

버전 3.10에서 변경됨: 그룹화 괄호를 사용하여 문을 여러 줄로 구분할 수 있습니다.

with (
   A() as a,
   B() as b,
):
   SUITE



완전히 똑같네요. 개인적인 취향에 따라 달라요.




다른 사람들이 말했듯이, 그것은 같은 결과이다. 다음은 이 구문을 사용하는 방법에 대한 자세한 예입니다:

blah.txt

1
2
3
4
5

한 파일을 열고 다른 파일에 내용을 간단하게 쓸 수 있습니다:

with open('blah.txt', 'r') as infile, open('foo.txt', 'w+') as outfile:
    for line in infile:
        outfile.write(str(line))

이제 다음을 포함합니다:

1
2
3
4
5



< python 3.9를 사용하는 사용자의 경우, 그룹화 괄호를 사용하는 것만큼 좋아 보이지는 않지만, 를 사용하여 여러 줄로 분할할 수 있습니다.

with A() as a, \
     B() as b, \
     C() as c:
    suite

반응형