Python: ctypes _Pointer подсказка типаPython

Программы на Python
Anonymous
Python: ctypes _Pointer подсказка типа

Сообщение Anonymous »

Я пытаюсь создать функцию с подсказкой типа, которая перебирает массив/указатель C, пока выполняется условие.

Код: Выделить всё

from ctypes import *
from ctypes import _Pointer
from typing import TypeVar, Callable
T = TypeVar('T')

def foreach(array: _Pointer[T], cond: Callable[[T], bool]):
i = 0
v: T = array[i]
while cond(v):
yield v
i += 1
v = array[i]

# Example
c_array = ...                               # _Pointer[int]
for i in foreach(c_array, lambda i: i < 10):
print(i)                                  # 'i' should be recognized as 'int', not 'Any'
Функция работает должным образом, и моя IDE распознает типы. Однако когда я запускаю код, я получаю следующую ошибку:

Код: Выделить всё

TypeError: type '_ctypes._Pointer' is not subscriptable
Traceback (most recent call last):
File "
.py", line 234
def foreach(array: _Pointer[T], cond: Callable[[T], bool]):
~~~~~~~~^^^
Значит, «_Pointer» не принимает тип во время выполнения, но линтеры распознают это? Как решить эту проблему?
Когда я использую псевдонимы типов, отображается только имя псевдонима, а не фактический тип. И я не хочу сообщать Python, используя подсказки типов, что указатель - это, например, список (

Код: Выделить всё

def foreach(array: list[T], ...)
), потому что это по-прежнему возвращает Any и портит анализ и автоматическое завершение ниже (и это вводит в заблуждение).
Я использую VS Code с официальным пакетом Python.

Подробнее здесь: https://stackoverflow.com/questions/776 ... pe-hinting

Вернуться в «Python»