본문 바로가기

개발/파이썬

[Effective Python] 19. 함수가 여러 값을 반환하는 경우 절대로 네 값 이상을 언패킹 하지 마라

반응형
책을 읽은 후에, 복습 차원에서 아래 문제들을 스스로 풀어보세요 :)

문제

def get_status(numbers):
    minimum = min(numbers)
    maximum = max(numbers)
    count = len(numbers)
    average = sum(numbers) / count

    sorted_numbers = sorted(numbers)
    middle = count // 2
    if count % 2 == 0:
        lower = sorted_numbers[middle -1]
        upper = sorted_numbers[middle]
        median = (lower + upper) / 2
    else:
        median = sorted_numbers[middle]

    return minimum, maximum, average, median, count


minimum, maximum, average, median, count = get_stats(lengths)

print(f'최소 길이: {minimum}, 최대길이: {maximum}')
print(f'평균: {average}, 중앙값: {median}, 개수: {count}')

 

1. 책에서 말하는 위 코드의 2가지 문제점은 무엇인가?

더보기

1. 모든 반환 값이 수 이기 때문에 순서를 혼동하기 쉽다
2. 함수를 호출하는 부분과 반환 값을 언패킹하는 부분이 길다

 

2. 1번에서 제시한 문제점을 어떻게 해결할 수 있을지 방안을 제시하고, 직접 코드를 수정하여라.

더보기

이 책에서는 일단 헷갈리니까 4개 이상 쓰지말라고 제시하고 있다 나의 개인적인 생각으로는 get_status 함수를 쪼개는 방법이다. 코드는 아래와 같다

def get_min(numbers):
    return min(numbers)

def get_max(numbers):
    return min(numbers)

def get_average(numbers):
    return sum(numbers) / len(numbers)

def get_median(numbers):
    sorted_numbers = sorted(numbers)
    middle = len(numbers) // 2
    median = sorted_numbers[middle]

    if count % 2 == 0:
        lower = sorted_numbers[middle -1]
        upper = sorted_numbers[middle]
        median = (lower + upper) / 2
    return median

 이렇게 나누어 두는게 헷갈리지 않고 사용하기에도 좋고 코드를 볼 때도 각각에 대해서 분리하여 파악할 수 있다고 생각한다.

 

3. 이 책에서 더 많은 값을 언패킹해야 할 때, 제시하는 방법은 무엇인가? - Beter way 37 참고

더보기

1. 경량 클래스

2. namedtuple

반응형