your programing

내 유형 힌트에서 함수 유형을 어떻게 지정할 수 있습니까?

lovepro 2020. 10. 10. 10:47
반응형

내 유형 힌트에서 함수 유형을 어떻게 지정할 수 있습니까?


현재 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]을 의미합니다.

콜 러블은 여러 / 유형의 인수를 취하고 모든 유형의 값을 반환합니다. 대부분의 경우 거의 모든 함수를 전달할 수 있으므로 원하는 것이 아닙니다. 함수 매개 변수와 반환 유형도 힌트되기를 원합니다.

이것이 많은 typesin typing이 이러한 추가 유형을 나타내는 하위 스크립팅을 지원하도록 오버로드 된 이유 입니다. 예를 들어, sum두 개의 ints를 받고 다음을 반환하는 함수 가 있다면 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

반응형