for 반복문을 이용해 전역 변수(global variable) 여러 개를 한번에 선언하는 방법
for 반복문을 이용해서 여러 개의 변수를 한번에 선언하는 방법을 소개한다.
예를 들어 아래와 같이 리스트 안의 각 요소들을 변수_1, 변수_2, 변수_3에 저장하고 싶다고 가정하자.
list = [1, 2, 3] ==> 변수_1 = 1 변수_2 = 2 변수_3 = 3
for문을 이용해 변수들을 한번에 지정하려면 globals() 함수를 사용하면 된다.
globals 함수는 호출 시점 현재 모든 전역 변수의 이름과 값을 딕서너리로 보여주는 함수이다.
예를 들어 파이썬을 실행하고 1과 2를 각각 a와 b 변수로 선언한 뒤에 globals()를 실행하면, 아래와 같은 결과물이 출력된다. 따로 선언하지 않아도 생성되는 변수들이 앞에 나오고, 맨 뒤에 새로 선언한 a와 b가 보인다.
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, 'a': 1, 'b': 2}
여기에서 소개할 방법은 바로 이 딕셔너리에다 새로운 키와 값을 추가하는 방법이다.
list = [1, 2, 3]
for i in list:
globals()['변수_{}'.format(i)] = i
위의 코드를 말로 설명해보면, 둘째 줄은 list의 각 요소들을 순회하라는 것이고, 셋째 줄은 globals()로 불러온 딕셔너리에다가 '변수_{}'.format(i)를 키로, i를 값으로 각각 저장하라는 것이다.
format 함수에 대해서는 앞서 소개한 문자열 포맷팅에 관한 게시글을 참조하기 바란다.
파이썬 문자열 포맷팅 방법/f-string과 format 함수
위 코드를 실행하고 다시 globals() 함수를 실행해보면 아래와 같은 딕셔너리가 출력된다.
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, 'list': [1, 2, 3], 'i': 3, '변수_1': 1, '변수_2': 2, '변수_3': 3}
당연히 print(변수_1) 등으로 값을 출력할 수도 있다.
여기에서 일어나고 있는 일은 기본적으로 아래에서 일어나는 일과 같다. 딕셔너리 뒤에다 대괄호를 붙여 그 안에다 키를 넣어 주고, 등호 오른쪽에다 값을 넣어 주면, 이미 같은 키가 있을 경우에는 해당 값을 업데이트하고, 없을 경우에는 새로운 키와 값을 추가하는 것이다.
>>> dic = {}
>>> dic["a"] = 1
>>> dic
{'a': 1}
| [참고] 사실 위 예제는 아래 처럼 하면 간단히 해결이 된다. 여기에서 소개하는 방법의 실제 활용례는 예제보다는 복잡한 경우가 될 것이다. 변수_1, 변수_2, 변수_3 = [1, 2, 3] |