[PYTHON] if 문에서 초기화 된 변수의 범위는 무엇입니까?
PYTHONif 문에서 초기화 된 변수의 범위는 무엇입니까?
저는 Python을 처음 사용하기 때문에 이것은 간단한 범위 지정 질문 일 것입니다. 파이썬 파일 (모듈)의 다음 코드는 약간 혼란 스럽습니다.
if __name__ == '__main__':
x = 1
print x
x 변수가 if 문에 국한되어 있으므로 외부에서 존재하지 않아야하므로이 코드는 예외를 throw합니다. 그러나이 코드는 실행되고 인쇄됩니다. 1. 아무도이 동작을 설명 할 수 있습니까? 모듈에 생성 된 모든 변수는 전체 모듈에서 전역 변수로 사용할 수 있습니까?
해결법
-
==============================
1.파이썬 변수는 할당 된 가장 안쪽의 함수, 클래스 또는 모듈로 범위가 지정됩니다. if 및 while 블록과 같은 제어 블록은 계산되지 않으므로 if 내부에 할당 된 변수는 여전히 함수, 클래스 또는 모듈로 범위가 지정됩니다.
파이썬 변수는 할당 된 가장 안쪽의 함수, 클래스 또는 모듈로 범위가 지정됩니다. if 및 while 블록과 같은 제어 블록은 계산되지 않으므로 if 내부에 할당 된 변수는 여전히 함수, 클래스 또는 모듈로 범위가 지정됩니다.
(생성자 표현식이나 list / set / dict comprehension으로 정의 된 암시 적 함수는 람다 식과 마찬가지로 계산식에 포함됩니다. 할당 문을 그 중 하나에 채울 수는 없지만 람다 매개 변수와 for 절 대상은 암시 적 할당입니다.
-
==============================
2.그렇습니다, 그들은 같은 "지역 범위"에 있고 실제로 이런 코드는 파이썬에서 일반적입니다 :
그렇습니다, 그들은 같은 "지역 범위"에 있고 실제로 이런 코드는 파이썬에서 일반적입니다 :
if condition: x = 'something' else: x = 'something else' use(x)
x는 조건 이전에 선언되거나 초기화되지 않습니다. 예를 들어 C 또는 Java와 같습니다.
즉, Python에는 블록 수준 범위가 없습니다. 하지만 다음과 같은 예제를 사용할 때는주의하십시오.
if False: x = 3 print(x)
NameError 예외가 분명하게 발생합니다.
-
==============================
3.파이썬의 범위는 다음 순서를 따릅니다.
파이썬의 범위는 다음 순서를 따릅니다.
(출처)
if와 다른 루핑 / 브랜칭 구문이 나열되어 있지 않으면 클래스, 함수 및 모듈 만 파이썬에서 범위를 제공하므로 if 블록에서 선언 된 모든 항목이 블록 외부에서 선언 된 것과 동일한 범위를 갖습니다. 컴파일시 변수가 검사되지 않기 때문에 다른 언어에서 예외가 발생합니다. 파이썬에서는 변수가 필요할 때 존재하면 예외는 발생하지 않습니다.
-
==============================
4.C와 같은 언어와 달리 Python 변수는 함수 (또는 클래스 또는 모듈) 전체에 대해 범위가 있으며, 가장 안쪽의 "블록"이 아닌 해당 변수가 나타납니다. 파이썬에서 변수를 선언 할 필요가 없다는 것을 제외하고는 함수 (또는 클래스 또는 모듈)의 맨 위에 int x를 선언 한 것과 같습니다.
C와 같은 언어와 달리 Python 변수는 함수 (또는 클래스 또는 모듈) 전체에 대해 범위가 있으며, 가장 안쪽의 "블록"이 아닌 해당 변수가 나타납니다. 파이썬에서 변수를 선언 할 필요가 없다는 것을 제외하고는 함수 (또는 클래스 또는 모듈)의 맨 위에 int x를 선언 한 것과 같습니다.
변수 x의 존재는 실행시에만 검사됩니다. 즉, print x 명령문에 도달 할 때입니다. __name__이 "__main__"과 같지 않으면 예외가 발생합니다. NameError : name 'x'이 정의되지 않았습니다.
-
==============================
5.Eli가 말했듯이, Python은 변수 선언을 요구하지 않습니다. C에서는 다음과 같이 말합니다.
Eli가 말했듯이, Python은 변수 선언을 요구하지 않습니다. C에서는 다음과 같이 말합니다.
int x; if(something) x = 1; else x = 2;
그러나 Python 선언에서 암시 적이므로 x에 할당하면 자동으로 선언됩니다. 파이썬은 동적으로 타입이 지정 되었기 때문에 정적으로 타입이 지정된 언어에서는 작동하지 않습니다. 사용 된 경로에 따라 변수가 선언되지 않고 사용될 수 있기 때문입니다. 이것은 정적으로 타입이 지정된 언어로 컴파일 될 때 잡힐 것이지만 동적으로 타입이 지정된 언어에서는 허용됩니다.
정적으로 형식이 지정된 언어는이 문제로 인해 if 문 외부에서 변수를 선언해야하는 유일한 이유입니다. 역동을 포용하십시오!
-
==============================
6.예. 범위에 대해서도 마찬가지입니다. 그러나 물론 기능이 아닙니다.
예. 범위에 대해서도 마찬가지입니다. 그러나 물론 기능이 아닙니다.
귀하의 예제에서 : if 문에서 조건이 거짓이면 x는 정의되지 않습니다.
-
==============================
7.조건이 참이고 x가 설정된 경우 명령 줄에서이 코드를 실행합니다. 비교:
조건이 참이고 x가 설정된 경우 명령 줄에서이 코드를 실행합니다. 비교:
>>> if False: y = 42 >>> y Traceback (most recent call last): File "<pyshell#6>", line 1, in <module> y NameError: name 'y' is not defined
from https://stackoverflow.com/questions/2829528/whats-the-scope-of-a-variable-initialized-in-an-if-statement by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 파이썬 사전이 해시 테이블의 예입니까? (0) | 2018.10.06 |
---|---|
[PYTHON] 컴퓨터에서 Python이 컴파일 된 Visual Studio 버전은 무엇입니까? (0) | 2018.10.06 |
[PYTHON] 어떻게하면 Python 프로그램을 실행할 수 있습니까? (0) | 2018.10.06 |
[PYTHON] PDF 파일에서 텍스트를 추출하는 방법은 무엇입니까? (0) | 2018.10.06 |
[PYTHON] 파이썬에서 굵은 텍스트를 어떻게 인쇄합니까? (0) | 2018.10.06 |