다음과 같은 기능이 있다면 :
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