現在の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 48 をチェックしましたが、関数タイプのヒントが見つかりませんでした。
@ jonrsharpe がコメントに記載されているように、これは typing.Callable
で実行できます。
from typing import AnyStr, Callable
def my_function(name: AnyStr, func: Callable) -> None:
問題は、それ自体がCallable
がCallable[..., Any]
に変換されることです。
呼び出し可能オブジェクトは、任意の数/タイプの引数を取り、任意のタイプの値を返します。ほとんどの場合、ほとんどすべての関数を渡すことができるため、これは望みのものではありません。関数のパラメーターと戻り値の型もヒントにする必要があります。
types
の多くのtyping
がオーバーロードされて、これらの追加の型を示すサブスクリプトをサポートする理由です。したがって、たとえば、2つのsum
sを取り、int
を返す関数int
がある場合:
def sum(a: int, b: int) -> int: return a+b
あなたの注釈は次のようになります:
Callable[[int, int], int]
つまり、パラメーターは外部サブスクリプションのサブスクリプトであり、戻りサブスクリプションは外部サブスクリプションの2番目の要素になります。一般に:
Callable[[ParamType1, ParamType2, .., ParamTypeN], ReturnType]
もう1つの興味深い点は、組み込み関数type()
を使用して、組み込み関数の型を取得し、それを使用できることです。だからあなたは持つことができる
def f(my_function: type(abs)) -> int:
return my_function(100)
またはそのフォームの何か