본문 바로가기

BackEnd/Python

변수 이름 for문으로 할당하는 방법(globals( ))

반응형


Python

종종 변수 이름 바꿔가면서 할당해야 하는 일이 생깁니다. 이때 어떤 식으로 변수 이름을 바꿔서 할당할 수 있는지 알아보도록 하겠습니다. 다양한 방법으로 활용하기 위해서 format 함수를 먼저 공부한 후 변수 이름을 바꿔주는 globals 함수를 알아보도록 하겠습니다.

- format 함수
- globals 함수

 


1. Format 함수

format 함수는 중괄호 { } 를 index로 사용해 값을 할당하는 함수입니다.

variable = "{Index 1} * {Index 2} = {Index 3}".format(Index 1 값, Index 2 값, Index 3 값)

앞에 나오는 중괄호 안에 있는 "Index 1" 라는 글자는 보시기 쉽게 Index가 1번이라고 표시한 것입니다. 이 "Index 1"에는 format함수에 들어가는 첫번째 인자인 "Index 1 값"이 할당됩니다.

실제 사용 예시를 보시겠습니다.

A = 9
B = 3

variable = "{} * {} = {}".format(A, B, A*B)
print(variable)
# 출력값 : 9 * 3 = 27

첫 번째 중괄호에 A의 값인 9가, 두 번째 중괄호에는 B의 값인 3이, 세 번째 중괄호에는 A와 B의 값이 곱해진 27의 값이 할당되어 출력되었습니다. 다른 예시를 아래에서 보시겠습니다.

A = ['Ironman', 'Captain America', 'Thor', 'Hulk']
variable = "제가 제일 좋아하는 히어로는 {}입니다.".format(A[0])
print(variable)
# 출력값 : 제가 제일 좋아하는 히어로는 Ironman입니다.

위의 예시처럼 문자도 입력이 가능합니다. A라는 리스트의 0번째 값을 할당했습니다. 이번에는 For문을 돌려서 확인해보겠습니다.

A = ['Ironman', 'Captain America', 'Thor', 'Hulk']
for i in A:
    variable = "제가 제일 좋아하는 히어로는 {}입니다.".format(i)
    print(variable)
    
# 첫 번째 출력값: 제가 제일 좋아하는 히어로는 Ironman입니다.
# 두 번째 출력값: 제가 제일 좋아하는 히어로는 Captain America입니다.
# 세 번째 출력값: 제가 제일 좋아하는 히어로는 Thor입니다.
# 네 번째 출력값: 제가 제일 좋아하는 히어로는 Hulk입니다.​

format 함수를 이용해 다양하게 활용할 수 있습니다.


2. globals 함수

globals 함수는 변수의 이름을 바꿔주는 역할을 하는 함수입니다. 저는 주로 globals 함수를 for문에서 사용합니다. 다른 분들은 어떤식으로 사용하는지는 잘 모르겠지만, 제가 사용하는 방식으로 설명하겠습니다.

globals()[name] = '값'

여기서 name 부분은 for문을 통해 받는 값 입니다. 아래 예시를 보시겠습니다.

A = ['Ironman', 'CaptainAmerica', 'Thor', 'Hulk']
B = [
    '로버트 다우니 주니어',
    '스티브 로저스',
    '크리스 햄스워스',
    '마크 러펄로'
]
for i, j in zip(A, B):
    globals()[i] = "'{}' 역할을 맡은 배우는 '{}'입니다.".format(i, j)
    print(globals()[i])

# 첫 번째 출력값: 'Ironman' 역할을 맡은 배우는 '로버트 다우니 주니어'입니다.
# 두 번째 출력값: 'CaptainAmerica' 역할을 맡은 배우는 '스티브 로저스'입니다.
# 세 번째 출력값: 'Thor' 역할을 맡은 배우는 '크리스 햄스워스'입니다.
# 네 번째 출력값: 'Hulk' 역할을 맡은 배우는 '마크 러펄로'입니다.

print(Ironman)
# 출력값: 'Ironman' 역할을 맡은 배우는 '로버트 다우니 주니어'입니다.

print(CaptainAmerica)
# 출력값: 'CaptainAmerica' 역할을 맡은 배우는 '스티브 로저스'입니다.

zip 함수는 두 가지 리스트를 for문으로 풀어줄 때 사용합니다. zip 함수의 첫 번째 인자인 list의 값은 i로, zip 함수의 두 번째 인자인 list의 값은 j로 각각 할당됩니다.

for문의 첫 번째 동작 때 i의 값은 'Ironman'이고, j의 값은 '로버트 다우니 주니어' 입니다. 따라서 첫 번째 동작을 풀어보면 아래와 같습니다.


globals()['Ironman'] = "'{ }' 역할을 맡은 배우는 '{ }'입니다.".format('Ironman', '로버트 다우니 주니어')
Ironman = "'Ironman' 역할을 맡은 배우는 '로버트 다우니 주니어'입니다."

따라서 print(Ironman)을 할 경우 "'Ironman' 역할을 맡은 배우는 '로버트 다우니 주니어'입니다." 값이 출력됩니다. 또 print(CaptainAmerica)를 할 경우 "'CaptainAmerica' 역할을 맡은 배우는 '스티브 로저스'입니다." 라는 값이 출력됩니다.

pycharm에서 확인한 변수와 할당된 값

이번에는 format과 globals를 함께 활용해 변수명을 더 다양하게 만들어보겠습니다.


3. format 함수와 globals 함수 활용

이번에는 format함수로 변수명에 숫자를 추가해 주도록 하겠습니다. 이번 예시에서는 아이언맨 시리즈에 따른 빌런의 이름을 보여주고 싶었습니다. 따라서 "Ironman1의 빌런은 이반반코입니다." 같은 모양으로 출력할 예정입니다.

villain = ['오베디아 스탠', '이반반코', '알드리치 킬리언']

for i, j in zip(villain, range(len(villain))):
    globals()['Ironman{}'.format(str(j+1))] = "Ironman{}의 빌런은 {}입니다.".format(str(j+1), i)
    print(globals()['Ironman{}'.format(str(j+1))])
    
# 첫 번째 출력값: Ironman1의 빌런은 오베디아 스탠입니다.
# 두 번째 출력값: Ironman2의 빌런은 이반반코입니다.
# 세 번째 출력값: Ironman3의 빌런은 알드리치 킬리언입니다.
  1. range(len(villain))
    - villain 리스트의 길이(3)를 range 함수로 받아 for문을 돌려 j에 0, 1, 2 순으로 할당합니다.

  2. globals( )['Ironman{ }'.format(str(j+1))]
    - j의 값은 for문이 돌 때 순차적으로 0, 1, 2 순으로 받는다 따라서 1을 더해줘야 1, 2, 3 의 값을 가질 수 있습니다.
    - j의 값은 int형이기 때문에 문자열에서 사용하기 위해서는 형 변환을 해야합니다.
    - j+1의 값을 str 함수를 사용해 문자열로 변경했습니다.
    - format 함수를 이용해 Ironman 뒤에 있는 중괄호에 값을 할당했습니다.
    - Ironman1, Ironman2 등이 변수값으로 활용됩니다.

  3. "Ironman{ }의 빌런은 { }입니다.".format(str(j+1), i)
    - 위와 같은 방식으로 아이언맨 시리즈 빌런을 할당합니다.

pycharm에서 확인한 변수와 할당된 값들

이제 for문에서 globals 함수와 format 함수를 이용해 변수명을 변경할 수 있게 됐습니다. 유용하게 사용될 수 있는 부분이기 때문에 구독자분들께서 해당 글을 참고해서 활요하시면 좋겠습니다.

 


반응형