Как аннотировать вызываемый объект с помощью * args и ** kwargs? - PullRequest
0 голосов
/ 09 июля 2020

У меня есть функция, которая возвращает функцию. Я хотел бы найти подходящую аннотацию типа. Однако возвращаемая функция имеет *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

1 Ответ

2 голосов
/ 12 июля 2020

Насколько я знаю, типизация python не позволяет сделать это прямо, как указано в документации набора. Вызываемый :

Синтаксис указать необязательные или ключевые аргументы; такие типы функций редко используются как типы обратного вызова. Вызываемый [..., ReturnType] (буквальное многоточие) может использоваться для ввода подсказки вызываемого объекта, принимающего любое количество аргументов и возвращающего ReturnType.

Но вы можете использовать расширения mypy вот так:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...