Pythonic이란 무엇인가?

파이써닉(Pythonic)

파이썬스러운 코드라는 의미. 아주 잘 짜여진 Python 코드를 Pythonic 하다고 부른다. 파이썬스러운 코드라? 파이썬은 무엇보다 읽기 쉽고 가독성이 높은 것을 추구한다. 파이썬에선 가독성이 높은 코드를 작성하기 위해 파이써니스타(파이썬 베테랑)들이 가이드라인을 제시하고 있고 이러한 가이드라인을 잘 따르는 코드가 파이썬스러운 코드다.

Hitchhiker's Guide to Python / PEP 8

위 홈페이지를 둘러보면 정말 잘 정리가 되어있는데 내가 새로 알게된? 자주 활용하지 않았던? 것들만 정리해 볼 예정이다.


정리

  • 한 줄의 한 구문을 준수하자
if x == 1: print('one')

위 같은 코드는 절대 작성하지 말자. 가끔가다 가독성을 추구한답시고 위와같이 코딩했던 적도 많았는데 나쁜 예란다. 충격.. 😅

  • kwargs는 정말 필요한 경우에만 쓰자 가독성을 저해시킬 수 있다
  • 클래스에서 private속성을 가진 변수는 이름 앞에 _(언더스코어)를 사용하여 표현하자

위와같은 경우는 새로 알게 된 사실이다. 파이썬에선 private 속성 자체가 존재하지 않고 사용자가 직접 접근할 수 있는데 _를 달아 둠으로써 주의를 기울이게 할 수 있다.

  • 반환값을 대체적으로 하나만 작성하며 예외를 처리해야 하는 경우 최대한 위쪽에 비치시키자. 이런 방식을 early return 이라고 부른다.
def division(x, y):
    if y == 0:
        return False

    return x/y
  • 사용하지 않을 변수는 __(언더스코어 2개)로 표현하자. 1개만 사용하는 것은 지양하자. 곂치는 경우가 있다.
for __ in range(10):
    print('단순반복')
  • 동일한 내용물을 가진 리스트를 생성할때는 *를 활용하자
list = [None] * 4
  • 다차원 리스트를 생성할 경우 리스트 내포를 적극 활용하자!
lists = [[] for __ in range(5)]
  • 값이 True, 거나 None이거나 0인 경우 따로 값을 비교시킬 필요가 없음
  • if문에서 dict.has_key()를 쓰지 말고 in으로 키의 존재 여부를 파악하자
  • lambda + filter, lambda + map을 활용할 수 있으면 적극 활용하자
  • 파일을 읽는 경우 with open을 사용하도록 하자
  • 길고 이어지는 경우에는 ()를 사용하도록 하자. 닫는 괄호는 개행하기 전에 닫자
from some.deep.module.inside.a.module import (
    a_nice_function, another_nice_function, yet_another_nice_function)

my_very_big_string = (
    "For a long time I used to go to bed early. Sometimes, "
    "when I had put out my candle, my eyes would close so quickly "
    "that I had not even time to say “I’m going to sleep.”")

오... ()가 있으면 띄어쓰기를 해서 가독성을 올리는 편인데 ()가 어디서나 활용할 수 있는 도구인지는 몰랐다. 문자열, 임포트할 때도 사용할 수가 있구나 😮

  • 개행할때 사칙연산 기호가 있다면 개행 후 기호를 표시한다
add_result = my_very_long_add_function( 
    my_very_long_variable_one
    + my_very_long_variable_two)
  • import 할때는 연속적으로 하지 않고 별도로 하는게 합리적이다
import os
import sys
  • from을 사용하여 import 할때는 연속적으로 해도 좋다
from subprocess import Popen, PIPE
  • 불필요한 공백은 지양하라. ,, :, ;가 나온 후에만 공백을 두는게 트랜드로 보인다 단 한개의 원소를 가진 튜플인 경우 마지막에 ,찍고 띄어쓰기 금지 연산 기호의 경우 앞 뒤로 공백을 준다
spam(ham[1], {eggs: 2})
bread = (3,)
total_age = person1.age + person2.age
  • PEP 8을 이용하여 가이드라인을 준수하고 있는지 파악해보자
pip install pep8
pep8 mysouce.py

이 글이 도움이 되었나요?

신고하기
0분 전
작성된 댓글이 없습니다. 첫 댓글을 달아보세요!
    댓글을 작성하려면 로그인이 필요합니다.