python - 如何使用 *args 和 **kwargs 注释可调用对象?

标签 python python-typing

我有一个返回函数的函数。我想找到一个合适的类型注释。但是,返回的函数有*args*kwargs .在 Callable[[Parameters???], ReturnType] 中是如何注释的?
例子:

from typing import Callable
import io
import pandas as pd

def get_conversion_function(file_type: str) -> Callable[[io.BytesIO, TODO], pd.DataFrame]:
    def to_csv(bytes_, *args, **kwargs):
        return pd.read_csv(bytes_, **kwargs)
    if file_type == "csv":
        return to_csv

最佳答案

据我所知,python 的typing` 不允许像typing.Callable 的文档中所述那样直接执行。 :

There is no syntax to indicate optional or keyword arguments; such function types are rarely used as callback types. Callable[..., ReturnType] (literal ellipsis) can be used to type hint a callable taking any number of arguments and returning ReturnType.


但是你可以使用 mypy extensions像这样:
from typing import Callable
from mypy_extensions import Arg, VarArg, KwArg

def foo(a: str, *args: int, **kwargs: float) -> str:
    return 'Hello, {}'.format(a)
    
def bar() -> Callable[[Arg(str, 'a'), VarArg(int), KwArg(float)], str]:
    return foo

关于python - 如何使用 *args 和 **kwargs 注释可调用对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62809562/

相关文章:

python-3.x - 在 Union 中处理带有值的参数的 Pythonic 方法

python - 将 Typing 和 Mypy 与描述符一起使用

python - Pylance:在这种情况下不允许使用 "ClassVar"?

python - 使用数字作为标签名称来解析损坏的 XML

python - Dask one-hot 在不知道类别的情况下进行编码

python - 在Python中通过正则表达式优化在两个列表之间查找匹配子字符串

python - 如何在 Python 中将没有空格的字符串拆分为整数列表?

python - 枚举属性的类型注释

python - 如何在 Python 中创建通用接口(interface)?

python - 处理 JSON 中的错误转义字符