내 유형 힌트에서 함수 유형을 어떻게 지정할 수 있습니까?
현재 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)
또는 그 형태의 무언가
참고 URL : https://stackoverflow.com/questions/37835179/how-can-i-specify-the-function-type-in-my-type-hints
'your programing' 카테고리의 다른 글
RSpec에서 IT 블록과 지정 블록의 차이점 (0) | 2020.10.10 |
---|---|
Objective-C : 어설 션 vs. 예외 vs. 오류 (0) | 2020.10.10 |
setuptools : 패키지 데이터 폴더 위치 (0) | 2020.10.10 |
JSLint 메시지 : 사용되지 않는 변수 (0) | 2020.10.10 |
PHP에서 부모 메서드를 호출하는 여러 방법 (0) | 2020.10.10 |