Тип Python 3 подсказки в Python 2

У меня есть питон def определение, которое кажется работающим для python3:

def get_default_device(use_gpu: bool = True) -> cl.Device:

Под python2 я получаю следующую синтаксическую ошибку:

root:~/pyopencla/ch3# python map_copy.py
Traceback (most recent call last):
  File "map_copy.py", line 9, in <module>
    import utility
  File "/home/root/pyopencla/ch3/utility.py", line 6
    def get_default_device(use_gpu: bool = True) -> cl.Device:
                                  ^
SyntaxError: invalid syntax

Как сделать подсказки типа совместимыми с python2?

1 ответ

Аннотации функций были введены в PEP 3107 для Python 3.0. Использование аннотаций в качестве подсказок типов было формализовано в PEP 484 для Python 3.5+.

Тогда любая версия до 3.0 не будет поддерживать синтаксис, который вы используете для подсказок типов. Тем не менее, PEP 484 предлагает обходной путь, который могут выбрать некоторые редакторы. В вашем случае подсказки будут выглядеть так:

def get_default_device(use_gpu=True):
    # type: (bool) -> cl.Device
    ...

или более многословно,

def get_default_device(use_gpu=True  # type: bool
                      ):
    # type: (...) -> cl.Device
    ...

PEP прямо заявляет, что эта форма подсказки типа должна работать для любой версии Python, если она вообще поддерживается.

Другие вопросы по тегам