파이썬스러운 코드, 어떤 차이가 있는 건가요?

조회수 855회

파이썬 코드 배열을 어떻게 줄여볼까 찾아보다가 다음과 같은 예시를 보게되었습니다.

arr = [1, 2, 3, 4]

# 파이썬스럽지 않은 코드
result = []
for i in range(len(arr)):
    if arr[i] % 2 == 1:
        result.append(arr[i])

# 파이썬스러운 코드 (List comprehension 을 사용)
result = [num for num in arr if num % 2]

'파이썬스러운' 이라는 말은 잘 이해가 가지는 않았지만, 한 줄의 코드로 정리가 가능하다는 것을 알 수 있는데요.

그런데 한 가지 궁금증이 생겼습니다.

'파이썬스럽지 않은 코드'와 '파이썬스러운 코드'는 코드를 실행하는 것에 있어서 어떤 차이가 있는 것일까?하고요.

파이썬스러운 코드라는 것이 파이썬의 작업 효율을 최대로 만들어준다는 의미로 파이썬스럽다고 하는 것인지,

그저 파이썬에서만 이렇게 코드를 단순하게 만들 수 있기 때문에 파이썬스러운 코드라고 하는 것인지에 대해 궁금합니다.

안타깝게도 이에 대한 글을 찾아볼 수 없어서 혹시 다른 분들에게 이에 대한 답을 알 수 있지 않을까 싶어 이렇게 질문을 남겨봅니다.

3 답변

  • 좋아요

    4

    싫어요
    채택 취소하기

    파이써닉한 코드를 작성하라고 하는 것은 성능상의 문제보다는 파이썬의 기능들을 활용해서 간결하게 작성하라는 것입니다.

    코드가 잛을수록 버그의 수도 줄어들 가능성이 크고 유지보수에도 도움이 되므로 간결하게 유지되는 것이 좋습니다.

    간혹 if, for 로 depth 가 4~5가 되는 코드를 보게 되는데 가독성도 떨어지고 유지보수도 힘든 이런 코드는 좋은 코드가 아닙니다. 이런 코드는 리팩토링 대상이고 함수로 분리를 고민해보고 최대한 간결하게 작성하도록 해야 합니다.

    • elif가 3~4개 이상 붙는 조건문도 저렇게 하나로 묶는게 좋을까요? 초보자 2020.12.29 10:23
    • 아니요 compreheion 의 경우 for if 로 하나정도만 유지하는 것이 좋습니다. elif 가 여러개 붙는다면 dict 로도 분리로직을 처리할 수 있습니다. 정영훈 2020.12.29 10:25
    • 답변 감사합니다! 괜찮다면 dict로 분리로직을 처리한다는게 감이 잘 안 잡히는데 어떤 식인지 예시를 하나 부탁드려도 될까요? 초보자 2020.12.29 10:37
  • 간단히 True 하나인 if 중첩구문이면 아래와 같이 할 수 있습니다.

    def one():
        print("one")
    def two():
        print("two")
    def three():
        print("three")
    
    value = 10
    if value > 10:
        one()
    elif value < 10:
        two()
    elif value == 10:
        three()
    
    three
    
    
    d = {value > 10:one, value < 10:two, value == 10:three}
    d[True]()
    
    three
    
    • 감사합니다! 초보자 2020.12.29 13:24
  • effective python 이란 책(한국어판 있음.) 보세요. 전 아주 도움이 되었어요.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)