> 백엔드 개발 > 파이썬 튜토리얼 > Python 2의 List Comprehension 범위가 Python 3과 다른 이유는 무엇입니까?

Python 2의 List Comprehension 범위가 Python 3과 다른 이유는 무엇입니까?

DDD
풀어 주다: 2024-11-30 11:50:11
원래의
751명이 탐색했습니다.

Why Does Python 2's List Comprehension Scope Differ from Python 3?

List Comprehensions: A Source of Confusing Scoping

Python 2의 List Comprehension의 한 가지 독특한 측면은 변수 범위 지정과의 특이한 상호 작용입니다. 특히 목록 이해의 루프 제어 변수는 주변 범위로 "누출"되어 잠재적인 오류와 혼란을 초래합니다.

다음 코드를 고려하세요.

x = "original value"
squares = [x**2 for x in range(5)]
print(x)  # Prints 4 in Python 2!
로그인 후 복사

Python 2에서 이 코드는 코드는 예기치 않게 "원래 값" 대신 4를 인쇄합니다. 이는 리스트 컴프리헨션에 사용된 루프 제어 변수 x가 컴프리헨션 외부에 정의된 x를 일시적으로 숨기기 때문입니다. 이러한 섀도잉은 이해가 완료된 후에도 지속됩니다.

이러한 동작은 미묘하고 디버그하기 어려운 오류를 유발할 수 있으므로 좌절감을 느끼게 하는 심각한 원인이 될 수 있습니다. 더욱이 이는 일반적으로 목록 이해와 관련된 편의성과 단순성을 훼손합니다.

그러나 Python 3에서는 이 동작이 해결되었습니다. 목록 이해는 더 이상 루프 제어 변수를 주변 범위로 유출하지 않습니다. 이는 항상 이런 방식으로 동작했던 생성기 표현식과 일치하게 합니다.

Python의 창시자인 Guido van Rossum에 따르면, 목록 내포의 원래 누출된 구현은 최적화를 위해 만들어진 "의도적인 절충"이었습니다. 그들의 성과. 그러나 Python 3에서는 성능 향상으로 인해 이러한 절충안이 불필요한 것으로 간주되었습니다.

Python 3에서 이러한 누수 동작이 제거되면서 목록 이해의 신뢰성과 일관성이 크게 향상되었습니다. 의도하지 않은 변수 섀도잉 가능성을 제거함으로써 이제 프로그래머는 더욱 안심하고 사용할 수 있습니다.

위 내용은 Python 2의 List Comprehension 범위가 Python 3과 다른 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿