복붙노트

[PYTHON] if 문에서 초기화 된 변수의 범위는 무엇입니까?

PYTHON

if 문에서 초기화 된 변수의 범위는 무엇입니까?

저는 Python을 처음 사용하기 때문에 이것은 간단한 범위 지정 질문 일 것입니다. 파이썬 파일 (모듈)의 다음 코드는 약간 혼란 스럽습니다.

if __name__ == '__main__':
    x = 1

print x

x 변수가 if 문에 국한되어 있으므로 외부에서 존재하지 않아야하므로이 코드는 예외를 throw합니다. 그러나이 코드는 실행되고 인쇄됩니다. 1. 아무도이 동작을 설명 할 수 있습니까? 모듈에 생성 된 모든 변수는 전체 모듈에서 전역 변수로 사용할 수 있습니까?

해결법

  1. ==============================

    1.파이썬 변수는 할당 된 가장 안쪽의 함수, 클래스 또는 모듈로 범위가 지정됩니다. if 및 while 블록과 같은 제어 블록은 계산되지 않으므로 if 내부에 할당 된 변수는 여전히 함수, 클래스 또는 모듈로 범위가 지정됩니다.

    파이썬 변수는 할당 된 가장 안쪽의 함수, 클래스 또는 모듈로 범위가 지정됩니다. if 및 while 블록과 같은 제어 블록은 계산되지 않으므로 if 내부에 할당 된 변수는 여전히 함수, 클래스 또는 모듈로 범위가 지정됩니다.

    (생성자 표현식이나 list / set / dict comprehension으로 정의 된 암시 적 함수는 람다 식과 마찬가지로 계산식에 포함됩니다. 할당 문을 그 중 하나에 채울 수는 없지만 람다 매개 변수와 for 절 대상은 암시 적 할당입니다.

  2. ==============================

    2.그렇습니다, 그들은 같은 "지역 범위"에 있고 실제로 이런 코드는 파이썬에서 일반적입니다 :

    그렇습니다, 그들은 같은 "지역 범위"에 있고 실제로 이런 코드는 파이썬에서 일반적입니다 :

    if condition:
      x = 'something'
    else:
      x = 'something else'
    
    use(x)
    

    x는 조건 이전에 선언되거나 초기화되지 않습니다. 예를 들어 C 또는 Java와 같습니다.

    즉, Python에는 블록 수준 범위가 없습니다. 하지만 다음과 같은 예제를 사용할 때는주의하십시오.

    if False:
        x = 3
    print(x)
    

    NameError 예외가 분명하게 발생합니다.

  3. ==============================

    3.파이썬의 범위는 다음 순서를 따릅니다.

    파이썬의 범위는 다음 순서를 따릅니다.

    (출처)

    if와 다른 루핑 / 브랜칭 구문이 나열되어 있지 않으면 클래스, 함수 및 모듈 만 파이썬에서 범위를 제공하므로 if 블록에서 선언 된 모든 항목이 블록 외부에서 선언 된 것과 동일한 범위를 갖습니다. 컴파일시 변수가 검사되지 않기 때문에 다른 언어에서 예외가 발생합니다. 파이썬에서는 변수가 필요할 때 존재하면 예외는 발생하지 않습니다.

  4. ==============================

    4.C와 같은 언어와 달리 Python 변수는 함수 (또는 클래스 또는 모듈) 전체에 대해 범위가 있으며, 가장 안쪽의 "블록"이 아닌 해당 변수가 나타납니다. 파이썬에서 변수를 선언 할 필요가 없다는 것을 제외하고는 함수 (또는 클래스 또는 모듈)의 맨 위에 int x를 선언 한 것과 같습니다.

    C와 같은 언어와 달리 Python 변수는 함수 (또는 클래스 또는 모듈) 전체에 대해 범위가 있으며, 가장 안쪽의 "블록"이 아닌 해당 변수가 나타납니다. 파이썬에서 변수를 선언 할 필요가 없다는 것을 제외하고는 함수 (또는 클래스 또는 모듈)의 맨 위에 int x를 선언 한 것과 같습니다.

    변수 x의 존재는 실행시에만 검사됩니다. 즉, print x 명령문에 도달 할 때입니다. __name__이 "__main__"과 같지 않으면 예외가 발생합니다. NameError : name 'x'이 정의되지 않았습니다.

  5. ==============================

    5.Eli가 말했듯이, Python은 변수 선언을 요구하지 않습니다. C에서는 다음과 같이 말합니다.

    Eli가 말했듯이, Python은 변수 선언을 요구하지 않습니다. C에서는 다음과 같이 말합니다.

    int x;
    if(something)
        x = 1;
    else
        x = 2;
    

    그러나 Python 선언에서 암시 적이므로 x에 할당하면 자동으로 선언됩니다. 파이썬은 동적으로 타입이 지정 되었기 때문에 정적으로 타입이 지정된 언어에서는 작동하지 않습니다. 사용 된 경로에 따라 변수가 선언되지 않고 사용될 수 있기 때문입니다. 이것은 정적으로 타입이 지정된 언어로 컴파일 될 때 잡힐 것이지만 동적으로 타입이 지정된 언어에서는 허용됩니다.

    정적으로 형식이 지정된 언어는이 문제로 인해 if 문 외부에서 변수를 선언해야하는 유일한 이유입니다. 역동을 포용하십시오!

  6. ==============================

    6.예. 범위에 대해서도 마찬가지입니다. 그러나 물론 기능이 아닙니다.

    예. 범위에 대해서도 마찬가지입니다. 그러나 물론 기능이 아닙니다.

    귀하의 예제에서 : if 문에서 조건이 거짓이면 x는 정의되지 않습니다.

  7. ==============================

    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
    
  8. from https://stackoverflow.com/questions/2829528/whats-the-scope-of-a-variable-initialized-in-an-if-statement by cc-by-sa and MIT license