'Better way 22. 변수 위치 인자를 사용해 시작적인 잡음을 줄여라' 정리

Effective Python 2nd 파이썬 코딩의 기술 (교보문고 링크)을 제대로 이해하고자 블로그에 정리합니다.



현재 위치

Note
<3. Functions>
Item 22: Reduce Visual Noise with Variable Positional Arguments
Better Way 22. 변수 위치 인자를 사용해 시작적인 잡음을 줄여라



함수의 위치 인자(positional argument)를 가변적으로 받을 수 있으면 함수 호출이 깔끔해지는 케이스가 있습니다. 이 인자를 가변 인자(varargs)나 스타 인자(star args)라고 부르기도 합니다. 관례적으로 가변 인자의 이름을 *args라고 붙이는 데서 유래했다고 합니다.

인수의 개수가 충분히 작다는 게 확실한 경우에만 쓰는 게 좋습니다. 또한 새로운 인자를 추가하는 것도 문제가 될 수 있습니다.



# Example 2
def log(message, *values):  # 가변인자 받음
    if not values:
        print(message)
    else:
        values_str = ', '.join(str(x) for x in values)
        print(f'{message}: {values_str}')


log('My numbers are', 1, 2)  # My numbers are: 1, 2
log('Hi there')  # Hi there

# Example 3
favorites = [7, 33, 99]
# 가변인자 들어갈 자리에 리스트에 별을 붙이면, 풀어서 전달됨
log('Favorite colors', *favorites)  # Favorite colors: 7, 33, 99

# temp = *favorites # Can't uses starred expression here


책에서 챕터 마지막 부분에 적혀있는 내용입니다.

Tip
Functions can accept a variable number of positional arguments by using *args in the def statement.
def 문에서 *arg를 사용하면 함수가 가변 위치 기반 인자를 받을 수 있다.
Tip
You can use the items from a sequence as the positional arguments for a functions with the * operator.
* 연산자를 사용하면 가변 인자를 받는 함수에게 시퀀스 내의 원소들을 전달할 수 있다.
Tip
Using the * operator with a generator may cause a program to run out of memory and crash.
제너레이터에 * 연산자를 사용하면 프로그램이 메모리를 모두 소진하고 중단될 수 있다.
Tip
Adding new positional parameters to functions that accept *args can introduce hard-to-detect bugs.
*args를 받는 함수에 새로운 위치 기반 인자를 넣으면 감지하기 힘든 버그가 생길 수 있다.




Related Content