콘텐츠로 건너뛰기

파이썬에서 named tuples 사용 방법

CodeMDD.io

파이썬 이름 있는 튜플로 파이썬 코드 작성하기

파이썬의 collections 모듈은 namedtuple()이라는 팩토리 함수를 제공하여 튜플을 다룰 때 코드를 더 파이썬스럽게 작성할 수 있도록 특별히 설계되었습니다. namedtuple()을 사용하면 명확하지 않은 정수 인덱스 대신 서술적인 필드 이름과 도트 표기법을 사용하여 값에 접근할 수 있는 변경 불가능한 시퀀스 타입을 생성할 수 있습니다.

파이썬을 사용하는 경험이 있다면 파이썬 개발자에게 필수적인 핵심 기술인 파이썬 코드 작성 기술(Pythonic code)을 알고 있을 것입니다. 이 튜토리얼에서는 namedtuple을 사용하여 이러한 기술을 향상시킬 것입니다.

이 튜토리얼에서는 아래와 같은 내용을 배울 것입니다.

  • **namedtuple()**을 사용하여 namedtuple 클래스를 생성하는 방법
  • namedtuple추가 기능을 식별하고 활용하는 방법
  • namedtuple 인스턴스를 사용하여 파이썬스럽게 코드를 작성하는 방법
  • namedtuple 또는 유사한 데이터 구조를 사용할 것인지 결정하는 방법
  • 새로운 기능을 제공하기 위해 namedtuple서브클래스화하는 방법

위에서 언급한 소스들에 대한 기본 지식이 없다면 걱정하지 마세요! 해당 리소스를 필요에 따라 중지하고 검토할 수 있습니다.

이름 있는 튜플로 파이썬 코드 작성하기

파이썬에서 namedtuple을 사용하여 파이썬 코드를 파이썬스럽게 작성할 수 있습니다. 아래는 namedtuple을 사용하는 예입니다:

from collections import namedtuple
# Point라는 namedtuple 클래스 생성
Point = namedtuple('Point', ['x', 'y'])
# Point 인스턴스 생성
point = Point(1, 2)
# 필드 이름을 통해 인스턴스 값에 접근
print(point.x) # 출력: 1
print(point.y) # 출력: 2

위 코드에서 namedtuplecollections 모듈에서 임포트한 팩토리 함수입니다. namedtuple() 함수는 첫 번째 인수로 클래스 이름을, 두 번째 인수로 필드 이름들을 전달받습니다. 이렇게 생성된 namedtuple 클래스로 인스턴스를 생성할 수 있습니다.

namedtuple을 사용하면 인스턴스의 값을 필드 이름을 통해 접근할 수 있으므로 코드의 가독성이 향상됩니다. 이는 정수 인덱스를 사용하는 것보다 훨씬 명확하고 이해하기 쉬운 코드를 작성하는 데 도움이 됩니다.

이 외에도, namedtuple은 다양한 추가 기능을 제공합니다. 아래에는 몇 가지 예시가 있습니다.

필수 인수를 사용하여 namedtuple 클래스 생성하기

필드 이름을 정의하고 기본값을 지정하는 것 외에도, namedtuple() 함수는 필수 인수로 사용할 필드를 지정할 수도 있습니다. 필수 인수는 인스턴스를 생성할 때 반드시 값을 전달해야 하는 필드입니다. 필수 인수를 사용하여 namedtuple 클래스를 생성하는 예시 코드입니다:

from collections import namedtuple
# Point라는 namedtuple 클래스 생성
Point = namedtuple('Point', ['x', 'y'], defaults=[0, 0])
# `x` 필드만 문제없이 표현 가능
point = Point(x=1)
print(point) # 출력: Point(x=1, y=0)

위 코드에서 defaults 매개변수를 사용하여 필드에 기본값을 지정할 수 있습니다. 이를 통해 필드의 값을 지정하지 않아도 인스턴스를 생성할 수 있습니다. x 필드만 값을 전달하고 y 필드는 기본값인 0으로 사용하는 예제입니다.

iterable에서 namedtuple 인스턴스 생성하기

iterable 객체에서 namedtuple 인스턴스를 생성하는 또 다른 유용한 기능이 있습니다. 이것은 namedtuple의 인자로 iterable 객체를 전달하는 것으로 가능합니다. 아래는 iterable에서 namedtuple 인스턴스를 생성하는 예시 코드입니다:

from collections import namedtuple
# Point라는 namedtuple 클래스 생성
Point = namedtuple('Point', ['x', 'y'])
# iterable 객체에서 인스턴스 생성
values = [1, 2]
point = Point._make(values)
print(point) # 출력: Point(x=1, y=2)

위 코드에서 _make() 메서드는 namedtuple의 클래스 메서드로, iterable 객체를 사용하여 인스턴스를 생성합니다. 이를 통해 iterable 객체에서 인스턴스를 생성하고 필드 값을 지정할 수 있습니다.

namedtuple 인스턴스를 딕셔너리로 변환하기

namedtuple 인스턴스를 딕셔너리로 변환할 수도 있습니다. 이 기능은 namedtuple_asdict() 메서드를 사용하여 가능합니다. 아래는 namedtuple 인스턴스를 딕셔너리로 변환하는 예시 코드입니다:

from collections import namedtuple
# Point라는 namedtuple 클래스 생성
Point = namedtuple('Point', ['x', 'y'])
# Point 인스턴스 생성
point = Point(1, 2)
# namedtuple 인스턴스를 딕셔너리로 변환
point_dict = point._asdict()
print(point_dict) # 출력: {'x': 1, 'y': 2}

위 코드에서 _asdict() 메서드를 사용하여 Point 인스턴스를 딕셔너리로 변환합니다. 이를 통해 namedtuple 인스턴스의 값을 딕셔너리 형태로 편리하게 확인할 수 있습니다.

기존 namedtuple 인스턴스의 필드 값 바꾸기

namedtuple 인스턴스의 필드 값을 변경할 수도 있습니다. 이 기능은 _replace() 메서드를 사용하여 가능합니다. _replace() 메서드에는 변경하려는 값을 포함한 키워드 인수를 전달합니다. 아래는 namedtuple 인스턴스의 필드 값을 변경하는 예시 코드입니다:

from collections import namedtuple
# Point라는 namedtuple 클래스 생성
Point = namedtuple('Point', ['x', 'y'])
# Point 인스턴스 생성
point = Point(1, 2)
# 필드 값을 변경한 새로운 인스턴스 생성
new_point = point._replace(x=10)
print(new_point) # 출력: Point(x=10, y=2)

위 코드에서 point 인스턴스의 x 필드 값을 10으로 변경하여 new_point 인스턴스를 생성합니다. 이를 통해 namedtuple 인스턴스의 필드 값을 간단하게 변경할 수 있습니다.

namedtuple 클래스의 추가 속성 알아보기

namedtuple 클래스는 추가로 몇 가지 속성을 제공합니다. 이 속성 중 하나는 ._fields입니다. 이 속성은 namedtuple의 필드 이름을 리스트로 반환합니다. _fields 속성을 사용하여 필드 이름을 확인할 수 있습니다. 아래는 namedtuple 클래스의 ._fields 속성을 사용한 예시 코드입니다:

from collections import namedtuple
# Point라는 namedtuple 클래스 생성
Point = namedtuple('Point', ['x', 'y'])
# `_fields` 속성을 사용하여 필드 이름 반환
fields = Point._fields
print(fields) # 출력: ('x', 'y')

위 코드에서 _fields 속성을 사용하여 Point 클래스의 필드 이름을 확인합니다. 이를 통해 namedtuple 클래스의 구조와 필드 이름을 쉽게 확인할 수 있습니다.

이름 있는 튜플로 파이썬스럽게 코드 작성하기

파이썬에서 namedtuple을 사용하여 namedtuple 인스턴스는 필드 이름을 통해 값을 접근할 수 있으므로 코드의 가독성이 향상됩니다. 이 외에도 namedtuple은 다른 유용한 몇 가지 기능을 제공합니다. 이제 namedtuple을 사용하여 여러 가지 상황에서 파이썬스럽게 코드를 작성하는 방법에 대해 알아보겠습니다.