썸네일

💡우아하게, 파이썬스럽게 코드를 작성해보자.

본 포스팅은 코딩테스트를 염두에두고 작성한 파이썬 코드 작성법이며, 파이썬 알고리즘 인터뷰(박상길 지음, 2020)를 읽으며 정리한 내용임을 밝힙니다.

프로그래밍 언어는 도구다.

어떤 알고리즘을 작성할 때 언어는 도구에 불과한게 맞습니다. 다만, 중요하게 생각해야할 점은

아무리 쉬운 도구라도 제대로 사용법을 숙지해야 제대로 사용할 수 있다.

입니다.

같은 칼이라도, 저의 칼질과 횟집 사장님의 칼질은 차원이 다릅니다.

저 또한 파이썬 문법에 대해 굉장히 깊이있는 내용까지 숙지하지 않고 현업에서, 혹은 학교 과제로 어설프게 익힌 언어로 코딩테스트를 시도할 때면 흔히 말하는 삽질을 굉장히 많이 했습니다.

비유하자면 횟감에 집중해야 하는데, 어떤 칼을 쓸지만 고민하다가 시간이 다 지나버리는 거라고 할까요..

따라서 파이썬이 쉬운 언어고 생산성이 좋은 언어로 알려졌다 하더라도 왜 쉽고 생산성이 좋은지 그 원리를 알지 못하면 제대로 그 장점을 활용하긴 어려울 것입니다.

코딩테스트에서도 마찬가지 입니다. 어설프게 알고 있다면 많은 시간을 허비하고 제 시간에 문제를 풀지 못하게 될 것입니다.

본 포스팅에선 파이썬을 파이썬스럽게 작성하는(Pythonic)방법에 대해 자세히 다뤄볼 것입니다.

기본적으로 알고있다 해도 놓치기 쉬운 고급 문법을 하나씩 살펴볼 예정입니다.

칼따위 신경쓰지 않고 횟감에 집중할 수 있는 사람이 될 수 있도록 해봅시다!

인덴트(Indent)

  • 파이썬은 PEP 8에 기술된 기준을 적용해 공백 4칸을 원칙으로 합니다.
  • 파라미터 길이 혹은 함수명이 길어질 때, 개행을 통해 깔끔하게 보이도록한다.

저는 파라미터의 길이가 길어질 때 밑과 같은 함수 정의 및 호출을 매우 선호하는데, 제 생각엔 가장 보기 좋은 것 같습니다.

def function_long_long_name(
        variable_one: int, variable_two: int,
        variable_three: int, variable_four: int
    ):

        return variable_one

function_long_long_name(
    variable_one=1, variable_two=2,
    variable_three=3, variable_four=4
)

파이참과 같은 IDE에서는 PEP 8 기준에 코딩스타일을 맞춰줄 수 있도록 해줍니다.

네이밍 컨벤션

파이썬에서는 기본적으로 _ 를 통해 단어를 구분하는 Snake Case를 따릅니다. 자바와 같이 대소문자로 구별하는 방식을 Camel Case라고 하는데, 파이썬에서는 위 방식을 최대한 지양합니다.

# Snake Case
-> snake_case, var_for_sum, ...

# Camel Case
# lowerCamelCase / UpperCamelCase
-> camelCase, NameOfVariable

타입 힌트

인덴트를 설명할 때 나온 코드에서 작성되어 있는데, Python 3.5 이상부터는 동적 타이핑 언어임에도 불구하고 타입을 명시해줄 수 있습니다.

다만 타입을 명시한다고 해서 동적으로 할당을 못하는건 아니다보니 최대한 명시한 타입에 다른 타입을 할당하는 행위를 최대한 지양하는 것이 좋습니다. 오히려 가독성을 해칠 수 있습니다.

# OK
a: str = '1'
# NO!!
b: int = '1'

# 파라미터의 타입 및 함수의 Return 타입 명시
def function(a: int) -> bool:
    return True

위와 같이 타입을 명시해서 보기좋게 제출하면, 코딩테스트에서도 면접관들도 좋은 점수를 줄 수 있을겁니다. 근데 코딩테스트 내에서는 명시하지 않는다고 크게 문제되진 않습니다.

다만 실무에서 코드를 작성할때는 좀 다릅니다. 저는 Django 기반으로 서버를 개발했기 때문에 Python을 사용했고, 가독성을 위해 Type Hint는 꼭 해놓는 편입니다.

Primitive Type 말고도 다양한 ORM 기반 Model들을 사용하기 때문에 안해놓으면 유지보수가 굉장히 힘들어집니다. 그러니 파이썬을 사용할 때 타입힌트를 쓰는 습관을 꼭 들여놓으세요!

mypy

$ pip install mypy

위 모듈을 통해 타입 힌트가 잘못 지정된 변수에 대해 Incompatible return value type 오류를 발생시켜 동적 할당으로 인한 문제 야기를 최소화할 수 있습니다.


다음 포스팅에서는

  • 리스트 컴프리헨션
  • 제너레이터
  • range
  • enumerate

에 대해 다뤄보겠습니다.