如何在我的类型提示中指定函数类型?
How can I specify the function type in my type hints?
如何将变量的类型提示指定为函数类型? (另请参阅:PEP 483。)
import typing
def my_function(func: typing.Function):
func()
如 noted in a comment, this can be done with typing.Callable
:
from typing import Callable
def my_function(func: Callable):
注: Callable
本身等同于 Callable[..., Any]
。
这样的 Callable
接受 any 数量和类型的参数 (...
) 并且 returns 的值为 any类型(Any
)。如果这太不受约束,还可以指定输入参数列表的类型和 return 类型。
例如,给定:
def sum(a: int, b: int) -> int: return a+b
对应的注解为:
Callable[[int, int], int]
即参数在外层订阅中以return类型作为外层订阅中的第二个元素进行下标。总的来说:
Callable[[ParamType1, ParamType2, .., ParamTypeN], ReturnType]
另一个值得注意的有趣点是,您可以使用内置函数 type()
来获取内置函数的类型并使用它。
所以你可以
def f(my_function: type(abs)) -> int:
return my_function(100)
或类似的形式
最简单、最奇特的解决方案是:
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
我想要此功能的具体用例是在 PyCharm 中启用丰富的代码完成。使用 Callable
不会导致 PyCharm 暗示该对象具有 .__code__
属性,这正是我想要的,在这种情况下。
我偶然发现了 types
模块并且..
from types import FunctionType
允许我用 FunctionType
注释一个对象,瞧,PyCharm 现在建议我的对象有一个 .__code__
属性。
OP 不清楚为什么这种类型提示对他们有用。 Callable 当然适用于实现 .__call__()
的任何东西,但为了进一步说明接口,我提交了 types
模块。
可惜 Python 需要两个非常相似的模块。
在 python3 中它可以在没有 import typing
的情况下工作:
def my_function(other_function: callable):
pass
如何将变量的类型提示指定为函数类型? (另请参阅:PEP 483。)
import typing
def my_function(func: typing.Function):
func()
如typing.Callable
:
from typing import Callable
def my_function(func: Callable):
注: Callable
本身等同于 Callable[..., Any]
。
这样的 Callable
接受 any 数量和类型的参数 (...
) 并且 returns 的值为 any类型(Any
)。如果这太不受约束,还可以指定输入参数列表的类型和 return 类型。
例如,给定:
def sum(a: int, b: int) -> int: return a+b
对应的注解为:
Callable[[int, int], int]
即参数在外层订阅中以return类型作为外层订阅中的第二个元素进行下标。总的来说:
Callable[[ParamType1, ParamType2, .., ParamTypeN], ReturnType]
另一个值得注意的有趣点是,您可以使用内置函数 type()
来获取内置函数的类型并使用它。
所以你可以
def f(my_function: type(abs)) -> int:
return my_function(100)
或类似的形式
最简单、最奇特的解决方案是:
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
我想要此功能的具体用例是在 PyCharm 中启用丰富的代码完成。使用 Callable
不会导致 PyCharm 暗示该对象具有 .__code__
属性,这正是我想要的,在这种情况下。
我偶然发现了 types
模块并且..
from types import FunctionType
允许我用 FunctionType
注释一个对象,瞧,PyCharm 现在建议我的对象有一个 .__code__
属性。
OP 不清楚为什么这种类型提示对他们有用。 Callable 当然适用于实现 .__call__()
的任何东西,但为了进一步说明接口,我提交了 types
模块。
可惜 Python 需要两个非常相似的模块。
在 python3 中它可以在没有 import typing
的情况下工作:
def my_function(other_function: callable):
pass