PYTHON/etc contents

for 문으로 변수 여러 개 생성하고 사용하기 / globals()

  • -

 

파이썬 내에서 for문을 통해 변수 생성하기

어떤 변수를 생성하는 과정에 있어 반복적인 작업을 통해 변수를 생성하는 방법은   globals()  를 통해 설정할 수 있다. 이 globals()의 형식은   globals()['변수명'.format(변수 이름마다 부여할 값)] = 변수에 입력할 값  의 형태로 사용한다. 

 

 

백문이불여일견

아주 간단한 코드를 짜보면 아래와 같이 제작할 수 있다. for문을 통해 i를 0부터 9까지 반복하도록 설정한 후,   globals   뒤에 있는 s{}에 형식(foramt)을 i로 설정한 후 그 변수에 i를 입력하는 것이다. 이 결과물은 >>> 하단과 동일하다. 곧, foramt()의 안에 들어가는 값은 곧 변수로 설정되고 등식(=) 뒤에 있는 값은 변수에 입력할 값이 되는 것이다.

for i in range(0, 10):
	globals()["s{}".format(i)] = i
    
>>>
s1 = 1
s2 = 2
s3 = 3
s4 = 4
s5 = 5
s6 = 6
s7 = 7
s8 = 8
s9 = 9

 

 

globals() 안에 어떤 변수들이 있는지 살펴보자

전역변수(globals)를 사용하는 방법은 여러 가지가 있다. 하지만 여러분은 어찌됐든 간에, 반복적인 작업을 통해 변수를 생성했으니 그 변수 하나하나에도 일일이 접근하기 보다는 반복 작업을 통해 접근할 것이다. 따라서 전역변수를 대상으로 반복작업을 어떻게 수행하는지 살펴보도록 하자.
* 물론 그게 아니라면, 앞서 살펴봤듯이 사전에 제작된 변수 이름(s1, s2, s3 등)을 그대로 사용하면 된다. 이때, 코드가 오류가 존재한다는 빨간 밑줄이 쳐질 것이지만 코드를 실행하는 데에는 아무런 문제가 발생하지 않는다.

일단, globals()라는 변수 안에 입력되어 있는 값들을 for문을 통해 한 번 살펴보도록 하자. 마찬가지로, 결과물은 >>> 하단과 동일하다. 

for i in globals():
	print(i)
    
>>>
__name__
__doc__
__package__
__loader__
__spec__
__annotations__
__builtins__
i
s0
s1
s2
s3
s4
s5
s6
s7
s8
s9

 

여기서 우리는 사전에 for문을 통해 전역변수를 설정할 때, 변수 이름의 맨 앞 부분에 "s"를 입력했었다. 우리는 이를 통해 우리가 사용하고자 하는 변수를 별도로 파악해서 사용할 수 있다. 어떻게? if문을 사용해서! 아래의 코드를 보면 알 수 있듯이, i라는 이름 안에서 [0], 즉 첫 번째 자리에 있는 값이 "s"인 경우에는 프린트하되 그게 아니라면 pass하도록 설정했다. 따라서 앞서 for문을 통해 생성했던 변수들만 출력할 수 있는 것이다.

for i in globals():
	if i[0] == 's':
		print(i)
	else:
		pass
        
>>>
s0
s1
s2
s3
s4
s5
s6
s7
s8
s9

 


728x90

 

변수명을 바탕으로 변수값 불러오기

근데 우리에게 필요한 건 변수 이름이 아니라, 해당 변수에 할당된 값이다. 그 값을 불러오기 전에 앞서, 우리는 global()의 자료형을 살펴볼 필요성이 있다. 결론부터 이야기하자면, globals()는 딕셔너리 형태이다. 

type(globals())
<class 'dict'>

 

따라서 우리는 딕셔너리 형태의 자료형 안에서의 Key 값과 Value 값에 접근하는 방법과 동일하게,   globals()['변수명']  과 같은 형태의 코드를 통해, 특정 변수 안에 입력된 값을 불러올 수 있다.

globals()['s1']
>>> 1

globals()['s2']
>>> 2

globals()['s3']
>>> 3

 

 

for문 안에서 변수명과 변수값 모두 불러오기

이를 for문 안에서 구축해보도록 하자.
* i는 변수명(딕셔너리에선 Key값)이고, globals()[i]는 i라는 변수명(Key값)에 입력되어 있는 값(Value 값)이다. 

for i in globals():
	if i[0] == 's':
		print(i, ":", globals()[i])
	else:
		pass

>>>
s0 : 0
s1 : 1
s2 : 2
s3 : 3
s4 : 4
s5 : 5
s6 : 6
s7 : 7
s8 : 8
s9 : 9

 

 

 


728x90
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.