파이썬 API 둘러보기

collections.namedtuple()

예를 들어 2차원 배열을 좌표평면에 매핑했을 때,

import numpy as np


def set_upleft(plane, index):
    plane[index[0]-1, index[1]-1] = 1


plane = np.zeros((3,4))
index = (2, 3)
plane[index] = 1
print(plane)

set_upleft(plane, index)
print(plane)

 

실행 결과:

[[0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 1.]]
[[0. 0. 0. 0.]
 [0. 0. 1. 0.]
 [0. 0. 0. 1.]]

 

바로 여기:

plane[index[0]-1, index[1]-1] = 1

매번 의미가 드러나지 않는 [0]과 [1]을 계속 붙여주거나 (x, y) 변수 두 개로 받아서 처리해야 한다.

코드가 간단하면 관계없지만,  복잡해질수록 그게 계속 거슬렸다. 나는.

그래서 namedtuple을 사용해 보았다.

 

이렇게 바꾸면

from collections import namedtuple
Coordinate = namedtuple('Coordinate', 'x, y')

...

index = Coordinate(2, 3)

...

 

index[0], index[1] 대신 index.x, index.y 로 쓸 수 있다.

가독성이 높아지...나? 나는 이게 더 좋다.

def set_upleft(plane, index):
    plane[index.x-1, index.y-1] = 1

 

namedtuple의 wrapper인 typing.NamedTuple 을 쓰면 조금 더 예쁘게 쓸 수 있다.

from typing import NamedTuple

class Coordinate(NamedTuple):
    x: int
    y: int

 

이것도 똑같은 의미다:

Coordinate = NamedTuple('Coordinate', [('x', int), ('y', int)])

 

댓글

댓글 본문
작성자
비밀번호
버전 관리
장과장02
현재 버전
선택 버전
graphittie 자세히 보기