2

방금 ​​Why do list comprehensions write to the loop variable, but generators don't?에서 배웠습니다. 목록 내재는 루프 변수를 주변 범위으로 "누설"합니다.리스트 comprehension은 Python2에서 루프 변수를 누설합니다. 어떻게하면 파이썬과 호환 될 수 있습니까?

Python 2.7.6 (default, Jun 22 2015, 17:58:13) 
>>> x = 'before' 
>>> a = [x for x in (1, 2, 3)] 
>>> x 
3 

이 버그는 Python3에서 수정되었습니다.

Python 3.4.3 (default, Oct 14 2015, 20:28:29) 
>>> x = 'before' 
>>> a = [x for x in (1, 2, 3)] 
>>> x 
'before' 

현재 Python2를 Python3과 호환되도록 만드는 가장 좋은 방법은 무엇입니까?

+1

을 "누출"이름에 의존하지 마십시오 ... 고유 한 이름을 사용 list-comp 변수에 대해. – mgilson

+0

목록이있는 생성기 식 사용 –

답변

3

가장 좋은 방법은 그냥 같은 변수 이름을 재사용하지 보통이지만 2와 3 모두 파이썬 3 동작을 얻는 것을 원하는 경우 :

list(x for x in (1, 2, 3)) 
2

mgilson의 코멘트 @를 아마 진실, 당신은 python2 및 python3 모두에서 작동하는 코드를 작성하려는 경우, 당신은, 목록 기능에 예를 발전기 기능을 래핑 수 :

Python 2.7.6 (default, Jun 22 2015, 17:58:13) 
>>> x = 'before' 
>>> a = list(x for x in (1, 2, 3)) 
>>> x 
'before' 
+0

일치하지 않습니다 –

+0

@PadraicCunningham : 자세히 설명해 주시겠습니까? –

+0

Python 2.7.11에서 코드를 실행하면'a'는 원하는 목록이 아닌'[ at 0x0000000009744900>]'이됩니다. –

관련 문제