본문 바로가기

IT

[Python] .get을 써야 하는 가? 인덱싱(subscription)을 써야 하는 가?

Contents

python을 사용하다보면, pythonic한 코드를 사용해야한다는 이야기를 많이 들을 것이다.

항상 의문인 것은 그래서 pythonic한 코드가 뭔데? 라는 것이다.

 

아무튼, 본론으로 돌아와서, python의 dictionary type의 value를 가져오는 방법은 크게 2가지 방법이 있다.

  1. .get("name")
  2. ["name"]

보통 주니어 개발자는 이런 경우에 이런 생각을 한다.

 

"둘 중에 어떤 것을 사용하는게 pythonic하게 작성하는 걸까?"

"어떤 문법을 사용하는게 맞을까?"

 

결론 부터 말하지면, "둘중에 뭐를 사용하더라도, 의도에 맞게 사용하면 된다" 이다.

의도에 맞게 사용한다는 관점이 뭔지 설명하겠다.

 

dict_instance.get("name") 과 dict_instance["name"]의 가장 큰 차이는 뭘까?

 

바로 "name"이라는 key가 없을 때의 동작이다.

.get("name")은 name이라는 key가 없으면, default로 None이라는 default 값을 주게 될 것이고, ["name"] 과 같이 인덱싱을 사용하면, "name"이라는 key가 없으면, 에러가 발생할 것이다.

 

 

바로 여기에서 "의도"가 들어간다.

 

로직 상 해당 dictionary에 default 값이 들어가도 상관이 없다면 .get()

무조건 사용자의 입력 등 default값이 들어가서는 안된다면 인덱싱(subscription)을 사용하는 것이다.

 

즉, 의도적으로 해당 값이 없다면 "에러"를 발생 시키겠다. 혹은 해당 값이 없다면, default 값을 사용해도 상관없다. 를 고민하고 개발을 진행했다면, .get()을 사용하든, 인덱싱을 사용했든 문제가 없다는 것이다.

 

그리고, 이 의도를 같이 개발하는 다른 개발자들에게 전달을 할 수 있으면 된다.

KeyError가 발생했을때, raise를 하는 코드를 명시적으로 넣어서 처리를 해준다던지, 주석을 남긴다던지, custom exception 처리를 해준다던지...

 

항상 내가 짜고 있는 코드가 "의도"에 맞게 짠게 맞는지를 확인하는 습관을 가져야 한다.