파이썬의 용어들 - 인수, 매개변수, *args와 **kwargs를 좀 더 정리했습니당. 해당 내용은 파이썬 문서 docs.python.org에서 읽고 정리해봤습니다.
1) 인수 Arguments
함수에 전달되는 값을 인수 (Arguments)라고 함. 파이썬 함수에서는 keyword 인수와 position 인수로 나뉨.
키워드 인수(keyword argument)는 예를 들어 다음의 complex함수의 real 이나 imag 에 들어가는 3과 5를 뜻함. ** 인 가변 표시를 써서 해당 키워드 인수 값을 전달 할 수 있음.
위치 함수(positional argument)는 직접 real 과 같이 지정해주지 않아도 해당 위치 만으로 값 전달함. 맨 앞에 들어있는 3 숫자는 자동으로 실수로, 뒤에 나오는 5는 자동으로 허수로 지정이 되는 것을 뜻함. 함수를 호출하더라도 직접 키워드 없이 위치만으로 호출한다고 해서 positional argument라고 부름.
파이썬에서는 값을 키워드로 호출하느냐. 위치로 호출하느냐가 중요함.
다른 프로그래밍 언어는 변수 특성 집어넣는 게 중요한 거에 비해 파이썬에서는 키워드 또는 위치 인수 값과 관련해서 좀 더 주의할 필요가 있었음. 이와 관련해서 *args, **kwargs 도 등장하기 때문. 해당 용어를 정리해 두면 *args 와 **kwargs를 헷갈리지 않고 사용할 수 있음.
2) 매개변수 (Parameter)
이제 함수에 인자값을 집어넣을 수 있는 매개변수도 이와 같이 위치 인지와 키워드 인자를 지정할 수 있는 매개변수의 종류로 나뉘게 됨.
매개변수는 5가지 종류.
(1) 둘 다 상관 없는 (positional-or-keyword parameter)
(2) 위치로만 되는 (positional-only parameter)
(3) 키워드로만 되는 (keyword-only parameter)
(4) 가변 위치 (var positional parameter)
(5) 가변 키워드 (var keyward parameter)
그리고 *args, **kwargs 라고 등장한 부분이 저기 가변 위치와 가변 키워드 매개변수에 해당함. 가변이란 말은 '변할 수 있다' 즉 인자값이 얼마가 되든 (유도리 있게) 조정할 수 있단 말임. 보통 함수에서
def function(a, b) 를 function(3, 5, 2, 5) 라고 치면 에러가 나는데 가변 위치나 가변 키워드는 그렇지 않음.
(1) 위치 또는 키워드 매개변수 예시
다음과 같은 함수의 예시가 있으면
func1의 인수값을 넣을 때 키워드인 func1(parameter1="k") 라고 해도 되고, func1("k") 라고 호출해도 결과 값은 동일함.
parameter2는 디폴트 값이 None으로 되어 있어서 함수를 호출할 때 func1("k", parameter2="y")라고 호출해도 되고, 간단하게 func1("k", "y") 라고 호출해도 무방. 사실상 파이썬을 활용할 때 대체적으로 다음과 같은 유형의 함수 매개변수 유형임
(2) 위치만 되는 매개변수 예시
func2() got some positional-only arguments passed as keyword arguments: 'parameter1, parameter2'
이라는 다음과 같은 에러가 나타나는 건. / 여기 슬러쉬 앞의 매개변수1, 2들은 키워드를 써서 호출하면 안 됨. 슬러쉬 뒤의 매개변수 3은 키워드를 쓰나 안쓰나 상관 없음.
(3) 키워드만 되는 매개변수 예시
TypeError: func3() takes 1 positional argument but 3 were given
SyntaxError: positional argument follows keyword argument
키워드는 그럼 반대로 매개변수가 무엇인지 적어주어야 함. 저기에서 키워드 매개변수는 * 뒤에 나오는 매개변수 1과 2의 값임.
에러가 나지 않으려면 키워드 매개변수가 무엇인지 정확하게 적어주기.
(4) 가변 위치 매개변수 예시 - *args
가변 위치(var-positional) 매개변수의 예시 중 대표적인 게 *args
앞에 *를 붙이고 원하는 이름을 붙이면 된다. 해당 표시는 호출하는 인수가 한 개 일지 여러개 일지 알 수 없는 가변 변수라는 뜻이다. 그리고 type(arguments) 또는 type(args) 해보면 class 'tuple'로 나타난다.
(5) 가변 키워드 매개변수 예시 - **kwargs
var-keyword parameter 의 대표적인 예시는 **kwargs
keyword arguments를 줄여서 kwargs라고 하는 거고. 키워드 매개변수도 ** 별 두개 앞에 붙이고 이름은 아무거나 해도 상관 없다. 적절한 변수명 짓는 게 쉽진 않지만, 굳이 kwargs라고 쓰지 않아도 됨. 그리고 반드시 키워드가 무엇인지 써줘야 하는 정도.
그리고 **kwargs 와 같이 키워드 인수값은 파이썬에서 정말 많이 활용된다. 예를 들어, import pandas 등의 판다스 라이브러리를 호출할 때 정말 많이 볼 수 있다.
이런 식으로 뭔가 프로그램 만들 때 안내하는 문구에 떠 있는데
해당 클래스 만들 때 def __init__(self, cnf=None, **kw): 등과 같이 여러 값들을 처리하기 편하게 하기 위함이었음.
마무으리
python 문서를 봐도 한 번에 읽고 이해하기 쉽지 않아서, 일단 뭔가 코드를 작성하면서 다시 한번 정리했다. 파이썬에서 주요하게 보는 인수가 무엇인지. 키워드 인수와 위치 인수 종류, 그리고 함수의 매개변수에서 다루는 종류. 키워드, 위치 매개변수, 그리고 가변까지 한번에 정리했다. *args와 **kwargs를 맨 처음에 접했을 때. 일단은 무작정 뭘 만든다고 쓰기 바빴는데 그래도 개념 정리를 하고 나니 좀 더 수월해진 느낌이 든다.
그리고 파이썬 문서의 예시 코드들은 솔직히 친절하게 설명이 되지 않아서. (개발자들 바쁜 거 알죠. 암요암요) 포스팅하면서 해당 코드들은 일단 머릿 속에 적당히 생각나는대로 좀 더 추가해서 썼다.
여기까지 끝:-)
관련 참고자료: https://docs.python.org/3/glossary.html
https://docs.python.org/3/glossary.html
'Python' 카테고리의 다른 글
f-string, float형일 때 2자리까지 표시하기 (0) | 2022.08.22 |
---|---|
python) 백준 1316 그룹 단어 체커, sorted 함수의 key의 find (0) | 2022.08.11 |
[pyscript] 99프로의 사람을 위한 프로그래밍을 만들어 나가겠습니다 (0) | 2022.07.14 |
ValueError: could not convert string to float: '' (0) | 2022.07.10 |
pycharm 에서 파이썬 새 프로젝트 만들기 (0) | 2022.07.10 |