[python] 파이썬에서 타입 힌트로 기본 매개 변수 값 추가

다음과 같은 기능이 있다면 :

def foo(name, opts={}):
  pass

그리고 매개 변수에 유형 힌트를 추가하고 싶습니다. 어떻게합니까? 내가 가정 한 방식으로 구문 오류가 발생합니다.

def foo(name: str, opts={}: dict) -> str:
  pass

다음은 구문 오류를 발생시키지 않지만이 경우를 처리하는 직관적 인 방법은 아닙니다.

def foo(name: str, opts: dict={}) -> str:
  pass

typing설명서 나 Google 검색 에서 찾을 수 없습니다 .

편집 : 파이썬에서 기본 인수가 어떻게 작동하는지 알지 못했지만이 질문을 위해 위의 예제를 유지합니다. 일반적으로 다음을 수행하는 것이 훨씬 좋습니다.

def foo(name: str, opts: dict=None) -> str:
  if not opts:
    opts={}
  pass



답변

두 번째 방법은 맞습니다.

def foo(opts: dict = {}):
    pass

print(foo.__annotations__)

이 출력

{'opts': <class 'dict'>}

PEP 484에 나열되지 않은 것은 사실 이지만, 유형 힌트는 PEP 3107에 설명 된 함수 주석의 응용 프로그램입니다 . 구문 섹션 에서는 키워드 인수가 함수 주석과 함께 작동하는 방식을 명확하게 설명합니다.

변경 가능한 키워드 인수를 사용하지 않는 것이 좋습니다. 자세한 내용은 여기를 참조 하십시오 .


답변

당신이 사용하는 경우 입력 (파이썬 3.5에서 도입을) 당신이 사용할 수있는 typing.Optional경우, Optional[X]동일합니다 Union[X, None]. 의 명시 적 값 None이 허용됨 을 알리는 데 사용됩니다 . 에서 typing.Optional :

def foo(arg: Optional[int] = None) -> None:
    ...


답변

나는 최근에이 하나의 라이너를 보았다 :

def foo(name: str, opts: dict=None) -> str:
    opts = {} if not opts else opts
    pass


답변