답변:
파이썬 변수는 가장 안쪽에있는 함수, 클래스 또는 모듈에 할당됩니다. 제어와 같은 블록 if
및 while
내부 할당 된 변수가 있으므로 블록은 포함되지 않습니다 if
여전히 함수, 클래스 또는 모듈에 속합니다.
(암시 적 기능은 발전기의 발현 또는 목록 / 설정 / DICT 이해에 의해 정의 할 당신은 그 중 하나에 할당 문을 물건 수 없습니다. 같은 람다 표현식을 할, 수,하지만 람다 매개 변수와 for
절 목표는 암시 적 과제입니다.)
Eli가 말했듯이 파이썬에는 변수 선언이 필요하지 않습니다. C에서는 다음과 같이 말합니다.
int x;
if(something)
x = 1;
else
x = 2;
그러나 파이썬에서는 선언이 암시 적이므로 x에 할당하면 자동으로 선언됩니다. 파이썬은 동적으로 입력되기 때문입니다. 사용되는 경로에 따라 변수가 선언되지 않고 사용될 수 있기 때문에 정적으로 유형이 지정된 언어에서는 작동하지 않습니다. 컴파일 타임에 정적으로 유형이 지정된 언어로 잡히지 만 동적으로 유형이 지정된 언어로 허용됩니다.
정적으로 형식화 된 언어 if
가이 문제 때문에 명령문 외부에서 변수를 선언해야하는 유일한 이유 는 다음과 같습니다. 역 동성을 받아들이십시오!
C와 같은 언어와 달리, 파이썬 변수는 가장 안쪽의 "블록"뿐만 아니라 그것이 나타나는 모든 함수 (또는 클래스 또는 모듈)의 범위에 속합니다. int x
파이썬에서는 변수를 선언 할 필요가 없다는 점을 제외하면 함수 (또는 클래스 또는 모듈)의 최상위에 선언 한 것과 같습니다.
변수의 존재는 x
런타임시, 즉 print x
명령문에 도달 할 때만 점검됩니다 . __name__
같지 않으면 "__main__"
예외가 발생 NameError: name 'x' is not defined
합니다..
if
문이 위 보유하지 않는다 (즉, 사실__name__
입니다 하지'__main__'
당신이 그것을 최상위을 실행하는 대신에 모듈을 가져올 때, 예를 들어), 다음x
구속하지 않으며, 후속 않았을 것print x
문 를 던질 것NameError: name 'x' is not defined
입니다.