2011-09-12 17 views
20

if-statement 외부에서 if 문 내 변수 범위를 파이썬에서 볼 수 있습니까? (자바 배경에서 오는 것이므로 약간 이상하게 보임)if 문에서 파이썬 변수 범위

다음과 같은 경우 이름은 먼저 if 블록 내부에서 정의되지만 변수는 if 블록 외부에서도 볼 수 있습니다. 오류가 발생할 것으로 예상했지만 '조'가 인쇄됩니다.

if 1==1: 
    name = 'joe' 
print(name) 

답변

36

if 문장은 파이썬에서 범위를 정의하지 않습니다.

어느 루프,

만 모듈, 함수와 클래스가 범위를 정의하는 등 with 문, try/except을 수행합니다.

파이썬 자습서에서 Python Scopes and Namespaces을 참조하십시오.

+0

@ 오웬? 참고? –

+0

아 ... 미안 .. 그 말이 틀 렸어. – Owen

+0

@ 범위를 정의하지 않은'nonlocal' 키워드를 생각해 보겠다. 단지 범위를 포함하지만 비전 역 범위를 나타내는 구문을 추가하기 만하면된다. – agf

1

모든 파이썬 변수는 함수 수준 범위에 살고 : 두 관련된 질문은 interestion 토론을했다. (전역 및 폐쇄 변수를 무시하는)

그것은 다음과 같은 경우에 유용합니다

if foo.contains('bar'): 
    value = 2 + foo.count('b') 
else: 
    value = 0 

나는 경우 문 앞에 변수를 선언하지 않아도 그런 식으로.

+0

첫 줄이 잘못되었습니다. 클래스 정의에 변수를 정의하면 전역 범위, 클로저 또는 함수 수준 범위가 아닙니다. – agf

+0

@agf - 클래스가 새 범위를 정의하지 않습니다. 자격이없는 메소드에서 클래스 변수에 액세스 할 수 없습니다 (예 :'thing'뿐만 아니라'Class.thing' 또는'self.thing'이 필요합니다). 그들에는 그들 자신의 네임 스페이스가 있습니다. – detly

+0

@agf - 사실, 이제 생각해 보면 클래스 정의에서 클래스 변수에 액세스 할 수 있다고 생각합니다 * 메소드 밖 *, 그래서 그게 무엇인지 모르겠습니다. – detly