Как аннотировать функцию, возвращающую массив в Python? - PullRequest
0 голосов
/ 04 января 2019

Рассмотрим следующий код Python:

def foo(aqs : typing.List[int]) -> ??? :
    array_type = ctypes.c_int64 * len(aqs)
    ans = array_type(*aqs)
    return ans

Как аннотировать возвращаемое значение этой функции?(Вместо ???)

Ответы [ 2 ]

0 голосов
/ 24 июня 2019

Я новичок в Python, но кажется, что вы ищете typing.List[T] (как сказал @ JörgBeyer в своем комментарии выше).

Пример функции, которая возвращает Listэкземпляров класса RegistrationRequest:

import string
import typing
from datetime import datetime

from dataclasses import dataclass


@dataclass()
class RegistrationRequest:
    activity: string
    start_at: datetime


def registrations_requests() -> typing.List[RegistrationRequest]:
    return [
        RegistrationRequest('Zumba', datetime(2019, 6, 25, 12, 30, 0, 0)),
        RegistrationRequest('Zumba', datetime(2019, 6, 27, 19, 15, 0, 0)),
    ]


print('{0}'.format(registrations_requests()))

Вывод:

[RegistrationRequest(activity='Zumba', start_at=datetime.datetime(2019, 6, 25, 12, 30)), RegistrationRequest(activity='Zumba', start_at=datetime.datetime(2019, 6, 27, 19, 15))]
0 голосов
/ 04 января 2019

Эта функция не имеет согласованного типа возвращаемого значения, поскольку длина возвращаемого массива является частью типа массива.Однако тип всегда является подклассом ctypes.Array, что является наиболее конкретной аннотацией, которую вы можете использовать:

def foo(aqs: List[int]) -> ctypes.Array:
    ...
...