Language

[ python ] python답게 코딩하기

궁금한게 많은 개발자 2023. 1. 23. 23:10

파이썬답게 코딩하기라는 책을 읽어보면서 기록할만한 문장이나 기억해두고 싶은 내용을 정리해보려 합니다.

 

우선 저자가 이 책을 통해 이야기하고 싶은 내용은 "내가 사용하는 프로그래밍 언어에 대해 관심을 갖자"라고 합니다.

그 이유 2가지 중 첫 째는 어떤 기술을 사용할 줄 알지만 왜 그런 기술이 있고, 어떻게 동작하는지를 모르는 경우가 많기 때문이고, 두 번째는 내가 익숙한 언어가 아닌 다른 언어로 프로그램을 만들 때 새로운 언어에 대한 깊은 이해 없이 내가 익숙한 언어의 코드 스타일로 작성하기 때문이라고 합니다.

 

 

프로그래밍의 본질적인 목적은 프로그램을 만드는 것. 즉 어떤 기능을 구현하는 것입니다. 목적을 달성하기 위해서는 언어만 사용할 줄 알면 되지만, 언어에 대한 깊은 이해가 없다면 결과물의 차이를 만들게 되고 더 나아가 완성된 프로그램의 효율성, 완성도, 만드는 데 걸리는 시간 등 많은 차이점을 만들 것입니다.

이러한 차이를 줄이기 위해 사용하는 프로그래밍 언어와 환경에 대해 잘 이해해야 합니다.

 

 

제가 개발할 때 주로 사용하는 파이썬이라는 언어에 대해 보다 깊게 알아보기 위해 관심이 생겨 책을 읽기 시작했습니다.

pythonic이라는 단어는 파이썬을 파이썬답고, 파이썬스럽게 사용 하기 위한 코드 작성 가이드라인과 같은 개념입니다.

python style guide보다는 확장된 개념으로 코드 스타일뿐만 아니라 알고리즘이나 로직을 구현하는데 있어서 더 파이썬다운 방법으로 구현하도록 안내하는 세부 지침으로 이해할 수 있습니다. 

pythonic이라는 개념이 나온 이유는 파이썬이 다른 언어에 비해 비교적 자유도가 높기 때문이 아닐까 생각합니다.

같은 기능을 하는 프로그램이라도 구현 방법이 완전히 다를 수 있음을 의미합니다.

아래는 python의 coding style guide의 기본인 pep8에 대해 자세한 내용을 담고 있습니다.

https://peps.python.org/pep-0008/

 

PEP 8 – Style Guide for Python Code | peps.python.org

PEP 8 – Style Guide for Python Code Author: Guido van Rossum , Barry Warsaw , Nick Coghlan Status: Active Type: Process Created: 05-Jul-2001 Post-History: 05-Jul-2001, 01-Aug-2013 Table of Contents This document gives coding conventions for the Python co

peps.python.org

 

pythonic의 예시로 자료형별 비교하는 방식에 대해 PEP8에도 간략하게 설명이 되어 있습니다.

singleton을 비교할 때는 is나 is not을 사용하고, ==, !=연산자를 사용하지 말라고 적혀 있고, if x라는 식을 작성할 때에는 if x not None을 의도한 것인지 if x is True인지 구분해서 사용하라고 적혀 있습니다. 또한 boolean값을 ==, !=연잔자를 사용해서 True, False를 비교하지 말라고 적혀있습니다.

그 이유는 equality와 identity라고 합니다.

동등성을 검사할 때는 ==, !=를 사용하고, 동일성을 검사할 때는 is, is not같은 연산자를 사용하라고 가이드합니다. 마지막으로 boolean은 동등성과 동일성을 떠나서 이 값이 True인지 명확하게 알려주기에 if x와 같이 사용하라고 합니다.

정리를 하자면,

  1. True/False를 비교할 때는 if문에 변수만 사용
  2. 동등성을 검증할 때는 ==, !=와 같은연산자 사용
  3. 동일성을 검증할 때는 is, is not과 같은 연산자 사용

이러한 규칙을 만든 이유는 가독성의 문제도 있겠지만, 효율성의 개선도 있다고 합니다. 또 의도치 않은 결과를 피할 수 있다고 합니다. 극단적인 예시라고 생각할 수도 있지만 x,y,z에 같은 값을 할당하고 비교를 했을 때 동등성 검사를 ==를 사용하지 않고 is를 사용한 경우에는 인터프리터의 최적화 여부에 따라 별도의 메모리 영역에 할당되어 is 동일성 검사에서 실패할 수 있습니다. (x is z가 인터프리터에서는 별도의 메모리 영역에 할당되어 id값이 달라 False가능)

def main():
    x=999, y=999
    print (x is y)
    z=999
    print (x is z)

이러한 간단한 예시들을 통해 python에 대해 조금 더 개념적으로 이해할 수 있게 되고 코딩을 할 때 한번 더 생각해보고 파이썬스럽게 작성하는 습관을 들일 수 있을 것 같습니다. 책을 읽으면서 기록할만한 내용이 추가되면 더 작성해보려 합니다.

 

https://product.kyobobook.co.kr/detail/S000001890843

 

파이썬답게 코딩하기 | 심경섭 - 교보문고

파이썬답게 코딩하기 | 프로그래밍 언어의 개념과 흐름에 대한 고찰파이썬을 사용하면서 Pythonic이나 Pythonista란 단어를 본 적이 있나요? 이 단어는 파이썬의 어떤 특별한 기능이나 기술을 의미하

product.kyobobook.co.kr