인수
함수로 값을 전달했을 때 이를 저장하는 변수
함수 내부에서 사용한다.
가변 인수
인수의 수가 고정되지 않고 호출 시 원하는 만큼 인수를 지정할 수 있다.
- 튜플로 받아서 처리한다.
일반 인수보다 뒤에 위치해야 한다.
함수 당 하나만 사용할 수 있다.
예시
인수명 앞에
*
를 붙여서 가변 인수임을 표시한다.def intsum(*ints): total = 0 for num in ints: total += num return total print(intsum(1, 2, 3)) # ints = (1, 2, 3) print(intsum(5, 7, 9, 11, 13)) # ints = (5, 7, 9, 11, 13) print(intsum(8, 9, 6, 2, 9, 7, 5, 8)) ''' stdout 6 45 54 '''
아래의
scores
리스트를 인자로 넣을 경우intsum(*scores)
처럼*
를 붙이면 리스트가 펼쳐진다.def intsum(*ints): print(type(ints)) print(ints) total = 0 for num in ints: total += num return total scores = [20, 30, 40] # print(intsum(scores)) # 에러 print(intsum(*scores)) # 펼침 : [20, 30, 40] -> 20, 30, 40 print(*scores) ''' stdout <class 'tuple'> (20, 30, 40) 90 20 30 40 '''
인수의 기본값
함수 호출 시 인수가 지정되지 않았을 때 사용할 기본값이다.
함수 정의 시 인수에 값을 대입하면 된다.
인수에 값을 지정할 때는 띄어쓰기를 안하는게 암묵적 룰인 것 같다.
def calcstep(begin, end=1, step=1): total = 0 for num in range(begin, end + 1, step): total += num return total print(f"1 ~ 10 = {calcstep(1, 10, 2)}") print(f"1 ~ 100 = {calcstep(1, 100)}") print(f"-10 ~ 1 = {calcstep(-10)}") ''' stdout 1 ~ 10 = 25 1 ~ 100 = 5050 -10 ~ 1 = -54 '''
키워드 인수
인수 명칭으로 변수를 매칭할 수 있다.
def calcstep(begin, end, step): total = 0 for num in range(begin, end + 1, step): total += num return total print(f"3 ~ 5 = {calcstep(3, 5, 1)}") print(f"3 ~ 5 = {calcstep(begin=3, end=5, step=1)}") print(f"3 ~ 5 = {calcstep(step=1, end=5, begin=3)}") print(f"3 ~ 5 = {calcstep(3, 5, step=1)}") print(f"3 ~ 5 = {calcstep(3, step=1, end=5)}") # print(f"3 ~ 5 = {calcstep(3, step=1, 5)}") # 에러 ''' stdout 3 ~ 5 = 12 3 ~ 5 = 12 3 ~ 5 = 12 3 ~ 5 = 12 3 ~ 5 = 12 '''
키워드 가변 인수
키워드 인수를 가변 개수로 전달할 때 사용한다.
함수 정의 시
**
기호를 인수 앞에 붙인다.사전(Dictionary)으로 받아서 처리한다.
def calcstep(**args): print(type(args)) print(args) begin = args.get('begin', 0) end = args['end'] step = args['step'] total = 0 for num in range(begin, end + 1, step): total += num return total print("3 ~ 5 =", calcstep(begin=3, end=5, step=1), end='\n\n') print("3 ~ 5 =", calcstep(step=1, end=5, begin=3), end='\n\n') print(" ~ 5 =", calcstep(step=1, end=5)) ''' stdout <class 'dict'> {'begin': 3, 'end': 5, 'step': 1} 3 ~ 5 = 12 <class 'dict'> {'step': 1, 'end': 5, 'begin': 3} 3 ~ 5 = 12 <class 'dict'> {'step': 1, 'end': 5} ~ 5 = 15 '''
사전도 펼칠 수 있다.
def calcstep(**args): print(type(args)) print(args) begin = args.get('begin', 0) end = args['end'] step = args['step'] total = 0 for num in range(begin, end + 1, step): total += num return total dic = { 'begin' : 1, 'end' : 100, 'step' : 2 } # dict의 펼침 : **사전명 print(calcstep(**dic)) print(*dic) # print(**dic) ''' stdout <class 'dict'> {'begin': 1, 'end': 100, 'step': 2} 2500 begin end step '''