본문 바로가기
파이썬

파이썬 ** kwargs를 사용하여 ** kwargs 인수를 다른 함수에 전달합니다.

by º기록 2020. 9. 17.
반응형

다음 예제를 이해하지 못합니다. 이러한 기능이 있다고 가정 해 보겠습니다.

# python likes
def save(filename, data, **kwargs):
    fo = openX(filename, "w", **kwargs) # <- #1
    fo.write(data)
    fo.close()
# python doesnt like
def save2(filename, data, **kwargs):
    fo = openX(filename, "w", kwargs) # <- #2
    fo.write(data)
    fo.close()

def openX(filename, mode, **kwargs):
    #doing something fancy and returning a file object

# 1이 올바른 솔루션이고 # 2가 잘못된 솔루션 인 이유는 무엇입니까? ** kwargs 는 기본적으로 dict이므로 openX에 인수를 전달하려면 올바른 방법은 ** 없이 dict를 제공하는 것입니다. 그러나 파이썬은 분명히 두 번째 것을 좋아하지 않으며 2 개의 인수 대신 3 개의 인수를 주었다고 말합니다. 그래서 그 이유는 무엇입니까?

 

해결 방법

 

두 번째 예에서는 파일 이름, 모드 및 사전 ( kwargs )의 3 가지 인수를 제공합니다. 그러나 파이썬은 2 개의 형식 인수와 키워드 인수를 기대합니다.

사전 앞에 '**'를 붙이면 키워드 인수에 사전 kwargs 의 압축을 풉니 다.

사전 (유형 dict )은 키-값 쌍을 포함하는 단일 변수입니다.

'키워드 인수'는 키-값 메소드 매개 변수입니다.

모든 사전은 함수 호출 중에 ** 접두사를 붙여 키워드 인수로 압축을 풀 수 있습니다.

 

참조 페이지 https://stackoverflow.com/questions/9867562

 

 

반응형

댓글