일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- MySQL
- 코딩테스트
- openCV
- 알고리즘 스터디
- type hint
- Matplotlib
- queue
- 프로그래머스
- Selenium
- 알고리즘스터디
- Stack
- String Method
- 선그래프
- dataframe
- javascript
- python
- programmers
- 데이터시각화
- 노마드코딩
- 정보처리기사 c언어
- Algorithm
- 알고리즘
- Join
- 가상환경
- 백준
- aws jupyter notebook
- pandas
- 자료구조
- NumPy
- 파이썬
- Today
- Total
조금씩 꾸준히 완성을 향해
[Python] *args / **kwargs 본문
함수를 효과적으로 사용하기 위해서는 *args 와 **kwargs의 특징과 차이점을 잘 알아야 한다.
▶ *args
개수와 상관없이 전체 인자 값을 다 가져올 때 사용한다.
앞에 *만 붙인다면 무슨 문자를 써도 상관없지만, 통상적으로는 arguments의 약자인 args를 많이 쓰인다.
형태는 tuple로 가져오기 때문에 tuple에서 사용할 수 있는 기능들을 모두 사용할 수 있다.
def get_avg(*args):
sum = 0
for a in args:
sum += a
avg = sum / len(args)
return avg
print(get_avg(80, 90, 100)) #90.0
print(get_avg(75, 80, 94, 78)) #81.75
print(get_avg(80, 73, 76, 86, 82)) #79.4
여기서는 인자로 모든 점수들을 다 받아서 평균을 구하는 함수를 구현했다.
def two_choice(word, *args):
if word == "arithmetic" :
total = sum(args)
else:
total = 1
for a in args:
total *= a
return total
x = two_choice("arithmetic", 1,2,3)
print(x) # 6
y = two_choice("multiplication", 1,2,3,4,5)
print(y) # 120
이렇게 다른 형태의 인자와도 함께 사용할 수 있다.
함수에서 파라미터를 받을 때는 순서대로 매칭하기 때문에
호출할 때 보낸 첫번째 문자열("arithmetic" / "multiplication")이 word로 들어가게 되고, 나머지 숫자들이 한꺼번에 *args로 들어가게 된다.
▶ **kwargs
dictionary 형태로 인자 값을 받아 올 때 사용한다.
앞에 **만 붙인다면 다른 문자로 값을 지정할 수도 있지만 통상적으로는 **kwargs로 많이 쓰인다.
인자로 넣을 때 기본 형태는 key = value 이다.
def intro(**kwargs):
print('Data type of argument:', type(kwargs))
for key, value in kwargs.items():
print(f'{key} is {value}')
intro(Firstname='Dave', Lastname='Karim', Age=32, Phone='01034567890')
'''
Data type of argument: <class 'dict'>
Firstname is Dave
Lastname is Karim
Age is 32
Phone is 01034567890
'''
호출하면서 보낸 여러 데이터가 함수 안으로 들어가면 key : value 형태로 dictionary 안에 저장된다.
따라서 dictionary에서 사용할 수 있는 여러 기능들을 함수 안에서 자유롭게 사용할 수 있다.
만약 dictioanry 자체를 파라미터로 넘기려면 변수 이름 앞에 **를 붙여줘야 한다.
dic = {"a" : 1, "b" : 2, "c" : 3, "d" : 4}
def func(**kwargs):
print(kwargs)
func(**dic) # {'a': 1, 'b': 2, 'c': 3, 'd': 4}
세가지 인자의 형태를 함께 출력해 보았다.
여기서 첫번째 인자는 필수값이라 넣어주지 않으면 에러가 뜬다.
나머지 값들은 없으면 빈 공간으로 출력되는 것을 볼 수 있다.
def f(a, *args, **kwargs):
return a, args, kwargs
print(f('no'))
print(f('no', 5, 10, 15))
print(f('no', 5, 10, 15, b=1))
print(f('no', 5, 10, 15, b=1, c=2))
'''
('no', (), {})
('no', (5, 10, 15), {})
('no', (5, 10, 15), {'b': 1})
('no', (5, 10, 15), {'b': 1, 'c': 2})
'''
잘 익혀 놓으면 여러가지 복합적인 데이터를 다룰 때 유용하게 쓸 수 있을 것 같다.
'Python > 문법' 카테고리의 다른 글
[Python] Decorator 기본 개념 (0) | 2022.09.12 |
---|---|
[python] 파일 처리 / 파일 읽고 쓰기 (0) | 2022.09.04 |
[Python] round 함수 주의점 round_half_even (0) | 2022.08.27 |
[Python] 문자열 거꾸로 뒤집기(slice, reverse, for 반복문) (0) | 2022.08.25 |
[Python] String method / index()와 find() 비교 (0) | 2022.08.25 |