현재 Python 3.5 프로젝트에서 유형 힌트를 사용하고 싶습니다. 내 함수는 매개 변수로 함수를 받아야합니다.
유형 힌트에서 유형 함수를 어떻게 지정할 수 있습니까?
import typing
def my_function(name:typing.AnyStr, func: typing.Function) -> None:
# However, typing.Function does not exist.
# How can I specify the type function for the parameter `func`?
# do some processing
pass
PEP 483을 확인 했지만 거기에서 함수 유형 힌트를 찾을 수 없습니다.
답변
@jonrsharpe 가 주석에서 언급했듯이 다음과 같이 할 수 있습니다 typing.Callable
.
from typing import AnyStr, Callable
def my_function(name: AnyStr, func: Callable) -> None:
문제는 Callable
그 자체로 다음 Callable[..., Any]
을 의미합니다.
콜 러블은 여러 / 유형의 인수를 취하고 모든 유형의 값을 반환합니다. 대부분의 경우 거의 모든 함수를 전달할 수 있으므로 원하는 것이 아닙니다. 함수 매개 변수와 반환 유형도 힌트되기를 원합니다.
이것이 많은 types
in typing
이 이러한 추가 유형을 나타내는 하위 스크립팅을 지원하도록 오버로드 된 이유 입니다. 예를 들어, sum
두 개의 int
s를 받고 다음을 반환하는 함수 가 있다면 int
:
def sum(a: int, b: int) -> int: return a+b
그것에 대한 주석은 다음과 같습니다.
Callable[[int, int], int]
즉, 매개 변수는 외부 구독의 두 번째 요소로 반환 유형을 사용하여 외부 구독에서 하위 스크립팅됩니다. 일반적으로 :
Callable[[ParamType1, ParamType2, .., ParamTypeN], ReturnType]
답변
주목해야 할 또 다른 흥미로운 점은 내장 함수 type()
를 사용하여 내장 함수 의 유형을 가져와 사용할 수 있다는 것입니다. 그래서 당신은 가질 수 있습니다
def f(my_function: type(abs)) -> int:
return my_function(100)
또는 그 형태의 무언가