2017-09-05 2 views
0

최근에 내 코드에서 버그를 잡았습니다. 가장 큰 문제는 코드가 아래 작동한다는 것입니다 :파이썬 전역 변수 범위

def test(): 
    print(memory) 


if __name__ == "__main__": 
    memory = 1 
    test() 

memory이 파일의 상단에 정의 그러나 이것은 나를 위해 모든 범위 규칙을 깨는 것 같아한다면 그것은 분명 할 것이다. 그러나 어떤 이유가 있어야합니다.

+0

나에게 논리적 인 것 같습니다. 'test()'가 호출 될 때까지'memory'가 이미 정의되어 있습니다. – ifconfig

+1

파이썬은 프로그램을 읽는 순서로 프로그램을 실행합니다. yiu가 함수를 정의 할 때 함수를 호출 할 때만 실행되므로 파이썬은 첫 번째 실행을 살펴 보지 않습니다. 당신은 'test()'에 대한 호출을 그 함수의 내용으로 바꾼다고 가정 할 수도 있습니다. – avloss

+0

@ifconfig 경험 후에 논리적으로? 나는 C와 선언을 컴파일하기 전에 함수에서 전역 변수를 사용하는 코드를 사용하곤했다. 그리고 이것은 논리적으로 보입니다. –

답변

0

메모리 변수 작업이 이상하게 보일지라도 예상됩니다. Variable Scope은 위반되지 않습니다!

경우 __name__ == "__main__": -이 문은 소스 파일이 실행을 위해 직접 호출이 아닌 다른 파일에 수입 제 3 모듈에서 호출 글로벌 기능을 정의하거나 선언하는 데 사용됩니다. (없이 무색하게 일어나고) 전역으로, 메모리 및 기능 전역 변수로 시험에 액세스 할 수 없음 - 직접 소스 파일을 실행할 때

따라서, 먼저 변수를 정의한다.

더 이해를 위해 아래의 링크를 참조 - What does if __name__ == "__main__": do?