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('내 숫자는 ', [1, 2])
log('안녕 ', []) # 계속 []값을 넣어줘야하는 잡음
내 숫자는 : 1, 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('내 숫자는 ', [1, 2])
log('안녕 ') # 훨씬 좋다
내 숫자는 : [1, 2]
안녕
favorites = [7, 33, 99]
log('좋아하는 숫자는', *favorites)
좋아하는 숫자는: 7, 33, 99
#
def my_generator():
for i in range(10):
yield i
def my_func(*args):
print(args)
# 튜플로 반환되는 것을 볼수 있다.
# 제너레이터에서 반복이 이뤄졌다는 것을 알 수 있다.
it = my_generator()
my_func(*it)
(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
- 함수에 새로운 위치 인자를 추가하면 해당 함수를 호출하는 모든 코드를 변경해야만 한다는 것
- 이미 가변 인자가 존재하는 함수 인자 목록의 앞부분에 위치 인자를 추가하려고 시도하면, 기존 호출 코드를 변경하지 않는 경우 미묘하게 깨질수 있음.
def log(sequence, message, *values):
if not values:
print(f'{sequence} - {message}')
else:
values_str = ', '.join(str(x) for x in values)
print(f'{sequence} - {message}: {values_str}')
log(1, '좋아하는 숫자는', 7, 33) # 새 코드에서 가변 인자를 사용. 문제 없음
log(1, '안녕') # 새 코드에서 가변 인자 없이 메시지만 사용. 문제 없음
log('좋아하는 숫자는', 7, 33) # 예전 방식 코드는 깨짐
1 - 좋아하는 숫자는: 7, 33
1 - 안녕
좋아하는 숫자는 - 7: 33