【发布时间】:2021-04-15 19:03:33
【问题描述】:
当定义为可调用参数时,print 或类似函数的类型签名是什么,它接受可变数量的任何类型的参数?
具体来说,这里output_function的声明是什么?
def f(x: str, output_function=print):
output_function(x)
更新:澄清为 Callable 参数。
【问题讨论】:
-
*args: Any...?
当定义为可调用参数时,print 或类似函数的类型签名是什么,它接受可变数量的任何类型的参数?
具体来说,这里output_function的声明是什么?
def f(x: str, output_function=print):
output_function(x)
更新:澄清为 Callable 参数。
【问题讨论】:
*args: Any...?
来自PEP 484
任意参数列表也可以进行类型注释,以便定义:
def foo(*args: str, **kwds: int): ...是可以接受的,这意味着,例如,以下所有的函数调用都代表具有有效参数类型的函数调用:
foo('a', 'b', 'c') foo(x=1, y=2) foo('', z=0)
所以print 将是:
from typing import Any, IO
def print(*args: Any, sep: str = ' ', \
end: str = '\n', file: IO = sys.stdout, \
flush: bool = False) -> None:
我不认为你可以将此应用于Callable。从docs 到typing,
没有语法来指示可选或关键字参数;此类函数类型很少用作回调类型。
Callable[..., ReturnType](字面省略号)可用于键入提示一个可调用的参数,该可调用对象采用任意数量的参数并返回ReturnType
【讨论】:
x: Callable[..., None] = print 没有任何投诉。
Callable[..., ReturnType](字面省略号)可用于键入提示可调用任意数量的参数和返回ReturnType"
typing.Protocol 和自定义 __call__。