【问题标题】:Python: What is the typing signature for print?Python:打印的打字签名是什么?
【发布时间】:2021-04-15 19:03:33
【问题描述】:

当定义为可调用参数时,print 或类似函数的类型签名是什么,它接受可变数量的任何类型的参数?

具体来说,这里output_function的声明是什么?

def f(x: str, output_function=print):
    output_function(x)

更新:澄清为 Callable 参数。

【问题讨论】:

  • *args: Any...?

标签: python typing


【解决方案1】:

来自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。从docstyping

没有语法来指示可选或关键字参数;此类函数类型很少用作回调类型。 Callable[..., ReturnType](字面省略号)可用于键入提示一个可调用的参数,该可调用对象采用任意数量的参数并返回 ReturnType

【讨论】:

  • 太棒了!声明为 Callable 参数怎么样?我已经更新了问题以澄清这就是我想要的。
  • mypy 对x: Callable[..., None] = print 没有任何投诉。
  • @MarkHarrison 据我所知,您无法明确指定。 docs.python.org/3/library/typing.html#typing.Callable“没有语法来指示可选或关键字参数;此类函数类型很少用作回调类型。Callable[..., ReturnType](字面省略号)可用于键入提示可调用任意数量的参数和返回ReturnType"
  • 或者使用 typing.Protocol 和自定义 __call__
猜你喜欢
  • 1970-01-01
  • 2010-10-19
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 2016-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多