파이썬

[Python] 함수에서 전역 변수 사용

zooheon 2022. 7. 31. 14:17
반응형

함수 내에서 전역 변수를 어떻게 생성하거나 사용합니까?

다른 함수 내에서 한 함수에 정의된 전역 변수를 어떻게 사용합니까?

 

global값을 할당하는 각 함수 내에서 선언하여 다른 함수 내에서 전역 변수를 사용할 수 있습니다 .

globvar = 0

def set_globvar_to_one():
    global globvar    # Needed to modify global copy of globvar
    globvar = 1

def print_globvar():
    print(globvar)     # No need for global declaration to read value of globvar

set_globvar_to_one()
print_globvar()       # Prints 1

globvar = 1지역 변수를 생성하는지 전역 변수를 변경 하는지 명확하지 않기 때문에 Python은 기본적으로 지역 변수를 생성하고 global키워드로 다른 동작을 명시적으로 선택하게 합니다.

모듈 간에 전역 변수를 공유하려면 다른 답변을 참조하십시오.

 

내가 당신의 상황을 올바르게 이해하고 있다면, 당신이 보고 있는 것은 Python이 로컬(함수) 및 글로벌(모듈) 네임스페이스를 처리하는 방법의 결과입니다.

다음과 같은 모듈이 있다고 가정합니다.

# sample.py
_my_global = 5

def func1():
    _my_global = 42

def func2():
    print _my_global

func1()
func2()

이것이 42를 인쇄할 것으로 예상할 수 있지만 대신 5를 인쇄합니다. 이미 언급했듯이 에 ' global' 선언을 추가 func1()하면 func2()42가 인쇄됩니다.

def func1():
    global _my_global 
    _my_global = 42

여기서 무슨 일이 일어나고 있는지 파이썬은 에 할당된 모든 이름이 함수 내 어디에서나 명시적으로 달리 언급되지 않는 한 해당 함수에 대해 지역적이라고 가정합니다. 이름에서 읽기만 하고 이름이 로컬에 존재하지 않는 경우 포함하는 범위(예: 모듈의 전역 범위)에서 이름을 조회하려고 시도합니다 .

따라서 이름에 42를 할당하면 _my_globalPython은 동일한 이름의 전역 변수를 숨기는 지역 변수를 생성합니다. 해당 로컬은 범위를 벗어나 반환 될 때 가비지 수집 됩니다. func1()한편, func2()(수정되지 않은) 전역 이름 이외의 다른 것을 볼 수 없습니다. _my_global이 네임스페이스 결정은 런타임이 아니라 컴파일 타임에 발생합니다. 할당하기 전에 inside 의 값을 읽는다면 , Python이 이미 지역 변수여야 한다고 결정했기 때문에 func1()를 얻게 됩니다. UnboundLocalError아직 연결된 값이 없습니다. 그러나 ' global' 문을 사용하면 로컬에서 이름을 할당하는 대신 다른 곳에서 이름을 찾아야 한다고 Python에 알릴 수 있습니다.

(이 동작은 주로 로컬 네임스페이스의 최적화를 통해 시작되었다고 생각합니다. 이 동작이 없으면 Python의 VM은 함수 내부에 새 이름이 할당될 때마다 최소 세 번의 이름 조회를 수행해야 합니다. t는 이미 모듈/내장 수준에 존재함), 이는 매우 일반적인 작업을 상당히 느리게 합니다.)

 

네임스페이스의 개념을 탐색할 수 있습니다. Python에서 모듈전역 데이터를 위한 자연스러운 장소입니다.

각 모듈에는 모듈에 정의된 모든 함수에서 전역 기호 테이블로 사용되는 고유한 개인 기호 테이블이 있습니다. 따라서 모듈 작성자는 사용자의 전역 변수와 우발적인 충돌에 대해 걱정하지 않고 모듈의 전역 변수를 사용할 수 있습니다. 다른 한편으로, 당신이 무엇을 하고 있는지 안다면 모듈의 전역 변수를 그 함수를 참조하는 데 사용되는 것과 동일한 표기법으로 만질 수 있습니다 modname.itemname.

모듈 내 전역의 특정 사용은 여기에 설명되어 있습니다. 모듈 간에 전역 변수를 공유하려면 떻게 해야 합니까?,그리고 완성도를 위해 콘텐츠가 여기에 공유됩니다.

단일 프로그램 내에서 모듈 간에 정보를 공유하는 일반적인 방법은 특수 구성 모듈(종종 config 또는 cfg 라고 함)을 만드는 것 입니다. 그러면 모듈을 전역 이름으로 사용할 수 있게 됩니다. 각 모듈의 인스턴스가 하나만 있기 때문에 모듈 개체에 대한 변경 사항은 모든 곳에 반영됩니다. 예를 들어:

파일: config.py

x = 0   # Default value of the 'x' configuration setting

파일: mod.py

import config
config.x = 1

파일: main.py

import config
import mod
print config.x

 

반응형