Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬(Python)에서 변수 이름을 문자열로 가져오는 방법

파이썬에서 변수 이름을 문자열로 얻는 것이 어려운 이유

사실 파이썬에서는 변수 이름을 문자열로 직접 조회하는 작업이 일반적이지 않습니다. 그 이유는 파이썬의 변수가 실제로는 객체를 가리키는 이름 매핑(name mapping)이기 때문입니다. 파이썬에서 고유한(canonical) 이름을 가지는 객체는 모듈, 함수, 클래스뿐이며, 함수나 클래스가 정의되거나 모듈이 임포트된 이후에 이 이름이 특정 네임스페이스에서 의미 있는 값을 가진다는 보장도 없습니다.

또한 이러한 이름들은 객체가 생성된 후에 얼마든지 변경될 수 있기 때문에, 항상 신뢰할 수 있는 정보라고 보기 어렵습니다.

locals()를 활용한 역방향 검색 방법

그럼에도 불구하고 변수 이름을 문자열로 가져오는 방법은 존재합니다. 다만 이 방식에는 몇 가지 주의할 점이 있습니다.

  • 추출하려는 변수의 을 기준으로 역방향 검색(reverse search)을 수행합니다.
  • 따라서 같은 값을 가진 변수가 두 개 이상 존재하면, 그중 어느 하나가 반환될 수 있습니다.
  • iteritems()(또는 items())는 해당 스코프 내의 모든 변수와 그 값을 딕셔너리 형태로 반환합니다.

다음은 locals()를 사용해 변수 이름을 문자열로 추출하는 예제입니다.

>>> my_var = 5
>>> my_var_name = [k for k, v in locals().iteritems() if v == my_var][0]
>>> my_var_name
'my_var'

위 코드의 동작 원리는 다음과 같습니다.

  1. locals()로 현재 스코프에 존재하는 모든 지역 변수를 딕셔너리로 가져옵니다.
  2. 리스트 컴프리헨션을 사용해 값이 my_var(즉, 5)와 일치하는 변수의 키(이름)만 필터링합니다.
  3. 필터링된 결과 중 첫 번째 요소를 선택하여 변수 이름 문자열을 얻습니다.

파이썬 3에서의 사용 방법

참고: 위 예제의 iteritems()는 파이썬 2 전용 메서드입니다. 파이썬 3 환경에서는 items() 메서드를 사용해야 하며, 문법은 거의 동일합니다.

>>> my_var = 5
>>> my_var_name = [k for k, v in locals().items() if v == my_var][0]
>>> my_var_name
'my_var'

이처럼 locals()와 딕셔너리 순회를 조합하면 변수 이름을 문자열로 얻을 수 있지만, 값이 중복될 경우 잘못된 이름이 반환될 수 있다는 점을 반드시 염두에 두어야 합니다. 따라서 실무 코드에서는 변수 이름 대신 딕셔너리 자료구조를 활용해 데이터를 관리하는 것이 더 안전하고 권장되는 방식입니다.