Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
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 31
Tags
more
Archives
Today
Total
관리 메뉴

KJH

args ??? kwargs ??? 본문

Python

args ??? kwargs ???

모이스쳐라이징 2024. 7. 30. 02:41

함수 인자를 받을때 *args, **kwargs 이런식으로 받는 경우를 볼 수 있다

보통 라이브러리 메서드를 타고가면 이런 케이스가 많은데 어떨때 쓰는지 보자

 

입력 갯수가 유동적일때 *으로 아스트리크 처럼 전부 인자로 받아주는데 가변 인자라고 하며

* 가변인자 tuple, ** 가변인자 dict 이며 때에따라 무척 편할거 같다.

 

인자가 몇개든 전부 받아줌

def func(*args):
    print(a)
    
func(1)
func(1,2,3,4,5,6,7)
# result (1,)
# result (1, 2, 3, 4, 5, 6, 7)

 

 

key vaule 형태로도 가능

def func(**kwargs):
    for key, value in kwargs.items():
        print(f"{key} = {value}")

func(a=1, b=2)  
func(c=3, d=3)


# result 
# a = 1
# b = 2
# c = 3
# d = 3

 

 

하나의 함수에서 둘 다 인자로 쓸 수 있음. 이러면 어떤 상황에서도 모든 인자를 받게됨

def func(*args, **kwargs):
    print(args, kwargs)
func(1,2,3,4)  
func(a=1, b=2)  
func(c=3, d=3)

# (1, 2, 3, 4) {}
# () {'a': 1, 'b': 2}
# () {'c': 3, 'd': 3}

 

 

하나의 함수에서 *args, **kwargs 사이에 인자를 추가도 가능한데 새로운 인자는 강제로 사용해야 함

 

에러 예시

def func(*args, num,**kwargs):
    print(args)
    print(num)
    print(kwargs)
func(1,2,3,d=4)

# Traceback (most recent call last):
#   File "c:\workspaces\python\test\lam.py", line 5, in <module>
#     func(1,2,3,d=4)
# TypeError: func() missing 1 required keyword-only argument: 'num'

 

 

동작 코드

def func(*args, num,**kwargs):
    print(args)
    print(num)
    print(kwargs)
func(1,2,num=3,d=4)

# (1, 2)
# 3
# {'d': 4}

 

 

인자에는 positional argument와 keyword argument, keyword-only argument가 있는데

positional는 이름을 명시할 필요 없이 순서 위치 기준으로 입력되는 형태 - 명시해서 넣는것도 가능

keyword는 이름을 명시해줘야 함. 순서 구분 없음 - 명시하지 않고 순서대로 쓰는것도 가능

 

위에서 args kwargs 사이에서 사용했던 num은 keyword-only argument가 되어서 꼭 명시해줘야 하는 인자가 됨

 

keyword-only는 비효율적일 수 있는게 함수 안에서 assert로 따로 처리하는게 에러체킹도 수월하고 이점이 많음

※ assert 는 디버깅용으로 assert 조건, 오류메세지 이렇게 사용해서 예외처리를 간단하게 가능

def func(*args,**kwargs):
    assert "num" in kwargs, "체크"
    print(args)
    print(kwargs)
func(1,2,3,4)

# Traceback (most recent call last):
#   File "c:\workspaces\python\test\lam.py", line 5, in <module>
#     func(1,2,3,4)
#   File "c:\workspaces\python\test\lam.py", line 2, in func
#     assert "num" in kwargs, "체크"
#            ^^^^^^^^^^^^^^^
# AssertionError: 체크

'Python' 카테고리의 다른 글

GIL, ASGI, Uvicorn(/w fastapi)  (0) 2025.05.04
MCP 사용해보기 (/w cursor, unity)  (0) 2025.04.06
lambda ???  (0) 2024.07.29
Slack API (fastapi - slack_bolt)  (0) 2024.07.19
azure openAI (GPT4.0, ada-002)  (0) 2023.11.26