-
[코딩도장] day21. 함수에서 위치 인수와 키워드 인수 사용하기IT/파이썬 2020. 9. 12. 16:36
■ 들어가기
- 파이썬 코딩 도장 (남재윤/길벗). 을 공부하며 정리하는 블로그
▶ Unit30. 함수에서 위치 인수와 키워드 인수 사용하기
- 30.1 위치 인수와 리스트 언패킹 사용하기
- 30.2 키워드 인수 사용하기
- 30.3 키워드 인수와 딕셔너리 언패킹 사용하기
- 30.4 매개변수에 초깃값 지정하기
>> 30.1 위치 인수와 리스트 언패킹 사용하기 <<
- 함수에 인수(argument)를 순서대로 넣는 방식을 위치 인수(positional argument)라고 부름
- 인수의 위치가 고정
1. 위치 인수를 사용하는 함수를 만들고 호출하기
- 10, 20, 30의 순서대로 값을 넣고 10, 20, 30의 순서대로 출력
>>> def print_numbers(a, b, c) :
print(a)
print(b)
print(c)
>>> print_numbers(10, 20, 30)
10
20
302. 언패킹 사용하기
- 인수를 순서대로 넣을 때는 리스트나 튜플 사용 가능하며
- 리스트 또는 튜플 앞에 *를 붙여서 함수에 넣어주면 됨
- 사용법
함수(*리스트)
함수(*튜플)
- 주의! 함수의 매개변수 개수와 리스트/튜플의 요소 개수는 동일해야 함! (그렇지 않은 경우 에러!)
>>> x = [10, 20, 30]
>>> print_numbers(*x)
10
20
30
>>> type(x)
<class 'list'>3. 가변 인수 함수 만들기
- 위치 인수와 리스트 언패킹은 언제 사용할까?
- 인수의 개수가 정해지지 않은 가변 인수(variable argument)에 사용
- 가변 인수 함수는 매개변수 앞에 *를 붙여서 만듦
- 가변 인수 함수 사용법
def 함수이름(*매개변수) :
코드
- 함수의 매개변수는 튜플
>>> def print_numbers(*args) :
for arg in args :
print(arg)
>>> print_numbers(10)
10
>>> print_numbers(10, 20, 30, 40) # 매개변수 넣은 만큼 출력됨
10
20
30
40- 함수에 인수 여러 개를 "직접" 넣는 방법 외에 리스트(튜플) 언패킹 방법 사용
>>> x = [10]
>>> print_numbers(*x) # print_numbers(10)와 동일
10
>>> y = [10, 20, 30, 40]
>>> print_numbers(*y) # print_numbers(10, 20, 30, 40)과 동일
10
20
30
40- 고정 인수와 가변 인수를 함께 사용하는 경우, 고정 매개변수를 먼저 지정하고 그 다음에 매개변수 앞에 *를 지정
>> 30.2 키워드 인수 사용하기 <<
- 함수 호출 시 지정된 인수를 넣는 방법 외에 인수의 순서와 용도를 매번 기억하지 않도록 키워드 인수(keyword argument)라는 기능을 제공함
- 키워드 인수 : 인수에 이름(키워드)을 붙이는 기능으로 키워드=값 형식으로 사용
- 사용법: 함수(키워드=값)
>>> def personal_info(name, age, address) : # 함수 define
print('이름: ', name)
print('나이: ', age)
print('주소: ', address)
>>> personal_info('홍길동', 30, '서울시 용산구 이촌동') # define된 순서대로 인수를 전달
이름: 홍길동
나이: 30
주소: 서울시 용산구 이촌동
>>> personal_info(30, '서울시 용산구 이촌동', '홍길동') # 인수를 잘못 넘긴 경우 엉뚱한 값이 도출됨
이름: 30
나이: 서울시 용산구 이촌동
주소: 홍길동
>>>
>>> # 키워드=값 형식으로 순서지키지 않아도 정상 할당됨
>>> personal_info(name='홍길동', address='서울시 용산구 이촌동', age=30)
이름: 홍길동
나이: 30
주소: 서울시 용산구 이촌동
>> 30.3 키워드 인수와 딕셔너리 언패킹 사용하기 <<
- 딕셔너리?? : {}(중괄호) 안에 키:값 형식으로 저장하고 각 키와 값은 ,(콤마)로 구분 (더보기)
- 키워드 인수로 딕셔너리 언패킹 사용가능하고 딕셔너리 앞에 **를 붙여서 함수에 넣어줌
- 사용법 : 함수(**딕셔너리)
- 주의! 딕셔너리의 키(키워드)는 반드시 문자열 형태여야 함!
>>> def personal_info(name, age, address) :
print('이름: ', name)
print('나이: ', age)
print('주소: ', address)
>>> x = {'name':'홍길동', 'age':30, 'address':'서울시 용산구 이촌동'}
>>> personal_info(**x)
이름: 홍길동
나이: 30
주소: 서울시 용산구 이촌동- 딕셔너리 언패킹 시, 함수의 매개변수 이름과 딕셔너리의 키 이름이 같아야 하며
- 함수의 매개변수 개수와 딕셔너리의 키 개수도 같아야 함 (이름과 개수가 다르면 함수 호출 불가)
1. **를 두 번 사용하는 이유
- *를 한 번만 사용해서 함수 호출
- 딕셔너리 x의 키가 함수의 매개변수에 맵핑되어 출력됨
- 즉, 딕셔너리를 한 번 언패킹하면 키를 사용한다는 의미!
>>> x = {'name':'홍길동', 'age':30, 'address':'서울시 용산구 이촌동'}
>>> personal_info(*x)
이름: name
나이: age
주소: address- *를 두 번 사용해서 함수 호출
- 딕셔너리의 키의 값을 사용한다는 의미!
>>> personal_info(**x)
이름: 홍길동
나이: 30
주소: 서울시 용산구 이촌동2. 키워드 인수를 사용하는 가변 인수 함수 만들기
- 키워드 인수를 사용하는 가변 인수 함수는 매겨변수 앞에 **를 붙여서 생성
- 사용법
def 함수이름(**매개변수) :
코드
- 함수의 매개변수는 딕셔너리
>>> # 인수를 직접 입력
>>> def personal_info(**kwargs) :
for kw, arg in kwargs.items() :
print(kw, ': ', arg, sep='')
>>> personal_info(name='홍길동')
name: 홍길동
>>> personal_info(name='홍길동', age=30, address='서울시 용산구 이촌동')
name: 홍길동
age: 30
address: 서울시 용산구 이촌동- **kwargs는 딕셔너리이며 키:값의 형태로 반환하기 때문에 for 반복문 사용시 키, 값을 저장하기 위한 변수 2개를 지정함
>>> def personal_info(**kwargs) :
print(kwargs.items())
>>> personal_info(name='홍길동')
dict_items([('name', '홍길동')])- 딕셔너리 언패킹 사용
>>> def personal_info(**kwargs) :
for kw, arg in kwargs.items() :
print(kw, ': ', arg, sep='')
>>> x = {'name': '홍길동'}
>>> personal_info(**x)
name: 홍길동
>>> y = {'name': '홍길동', 'age': 30, 'address': '서울시 용산구 이촌동'}
>>> personal_info(**y)
name: 홍길동
age: 30
address: 서울시 용산구 이촌동- 일반적으로 **kwargs를 사용한 가변 인수 함수는 함수 안에서 딕셔너리 안에 특정 키가 있는지 확인 후 기능 생성
>> 30.4 매개변수에 초깃값 지정하기 <<
- 함수 호출할 때 인수를 넣지 않더라도 초깃값을 설정하면 해당 초깃값으로 처리 가능
- 사용법
def 함수이름(매개변수 = 값) :
코드
- 초깃값이 설정되어 있어도 다른 인자를 전달하면 해당 인자값으로 설정됨
>>> def personal_info(name, age, address='비공개') :
print('이름: ', name)
print('나이: ', age)
print('주소: ', address)
>>> personal_info('홍길동', 30)
이름: 홍길동
나이: 30
주소: 비공개
>>> personal_info('홍길동', 30, '서울시 용산구 이촌동')
이름: 홍길동
나이: 30
주소: 서울시 용산구 이촌동1. 초깃값이 지정된 매개변수의 위치
- 초깃값이 지정된 매개변수 다음에는 초깃값이 없는 매개변수가 올 수 없음
- 즉, 초깃값이 지정된 매개변수는 항상 맨 마지막에 위치해야 함!
● 요약 ●
1. 언패킹 : 리스트나 튜플, 딕셔너리의 값을 함수의 매개변수로 지정할 수 있음
2. *는 리스트/튜플, **는 딕셔너리 에 사용
'IT > 파이썬' 카테고리의 다른 글
[코딩도장] day22. 파이썬 람다 표현식 - map, filter, reduce (0) 2020.09.13 [코딩도장] day22. 재귀호출 (0) 2020.09.13 [코딩도장] day21. 파이썬 함수 사용하기 (0) 2020.09.12 [코딩도장] day20. 회문 판별과 N-gram 만들기 (0) 2020.09.12 [코딩도장] day20. 27.5 연습문제 (0) 2020.09.11