source

어떻게 내 타입 힌트에 기능 형식을 지정할 수 있을까요?

factcode 2022. 9. 15. 22:45
반응형

어떻게 내 타입 힌트에 기능 형식을 지정할 수 있을까요?

내가 어떻게 기능 형식으로 변수의 형식 힌트 지정합니까?(참고 항목:PEP483.)

import typing

def my_function(func: typing.Function):
    func()

으로서 @ jonrsharpe 발언에서 지적했듯이, 이 타이핑 할 수 있다.Callable:

from typing import Callable

def my_function(func: Callable):

주의: Callable스스로에 해당합니다.Callable[..., Any]. 그러한Callable는 임의의 수 및 유형의 인수를 받아들입니다(...임의의 유형의 을 반환합니다( ).Any만일 이게 너무 구속 받지 않는 것이다.).는 입력 인수 목록 및 반환 형식의 유형을 지정할 수 있다.

예를 들어, 주어진:

def sum(a: int, b: int) -> int: return a+b

이와 상응하는 주석은:

Callable[[int, int], int]

즉, 매개 변수를 외부 가입에서 쇄골 바깥쪽 구독에서 두번째 요소로 반환 형식과 sub-scripted 있다.일반적으로:

Callable[[ParamType1, ParamType2, .., ParamTypeN], ReturnType]

주목할 또 다른 흥미로운 점은 기능에 건설 이용할 수 있다.type()의 형식 기능과 그것을 사용하면 된다.그래서 그럴 수도

def f(my_function: type(abs)) -> int:
    return my_function(100)

아니면 그런 형태로

이 기능을 필요로 하는 구체적인 사용 사례는 PyCharm에서 풍부한 코드 완성을 가능하게 하는 것이었습니다.사용.CallablePyCharm은 그 물체에 어떤 물질이 있다는 것을 암시하지 않았다..__code__Attribute(아트리뷰트)를 선택합니다.이 경우는, 제가 원하던 것입니다.

우연히 마주쳤다types모듈 및..

from types import FunctionType

오브젝트에 주석을 달 수 있게 되었습니다.FunctionType그리고, PyCharm은 이제 내 물체에 어떤 것이 있다는 것을 암시합니다..__code__기여하다.

OP는 왜 이런 유형의 힌트가 그들에게 유용한지에 대해 명확하지 않았다.Callable은 확실히 구현되는 모든 것에 유효합니다..__call__()다만, 인터페이스의 자세한 설명을 위해서,types모듈.

Python이 두 개의 매우 유사한 모듈을 필요로 했다는 것이 유감입니다.

python3에서는 이 기능은import typing:

def my_function(other_function: callable):
    pass

가장 쉽고 세련된 솔루션은 다음과 같습니다.

def f(my_function: type(lambda x: None)):
    return my_function()

이는 다음과 같은 방법으로 입증할 수 있습니다.

def poww(num1, num2):
    return num1**num2
    
print(type(lambda x: None) == type(poww))

출력은 다음과 같습니다.True

언급URL : https://stackoverflow.com/questions/37835179/how-can-i-specify-the-function-type-in-my-type-hints

반응형