Содержат ли файлы .pyc информацию о подсказках типа? - PullRequest
0 голосов
/ 31 мая 2018

Я предположил, что поддержка хинтинга в стандартной библиотеке основывалась на чтении простого источника, как inspect делает для некоторых вещей, но я посмотрел на typing.py в стандартной библиотеке, и, похоже, компилятор делаетсохранить информацию о подсказках типа на самом объекте.

Итак, если я сделаю:

def myfunc(a: int, b:int): -> str
    return "{a} + {b} = {a+b}"

, а затем скомпилирую это в файл .pyc, информация типа останется так, что кто-то, ктоЯ дал .pyc файл может использовать такие вещи, как typing.get_type_hints() для доступа к нему?(При условии, что у меня есть веская причина для распространения только .pyc.)

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Вы уже ответили на свой вопрос здесь:

, но я посмотрел на typing.py в стандартной библиотеке и, похоже, компилятор хранит информацию о подсказках типа для самого объекта.

Это означает, что информация о наборе не теряется и компилируется с остальным кодом, что является очевидным поведением.Вы можете просто проверить это, создав файл .pyc из вашего файла python, а затем импортировав скомпилированный модуль и протестировав его следующим образом.Также обратите внимание, что у вас есть синтаксическая ошибка в вашем коде.Вы должны переместить : после -> str:

In [38]: import py_compile

In [39]: py_compile.compile('ex.py')
Out[39]: '__pycache__/ex.cpython-35.pyc'

In [40]: cd __pycache__/
/home/kasra/Desktop/__pycache__

In [41]: import ex

In [42]: ex.myfunc
Out[42]: <function ex.myfunc(a:int, b:int) -> str>

In [43]: import typing

In [44]: typing.get_type_hints(ex.myfunc)
Out[44]: {'a': int, 'b': int, 'return': str}
0 голосов
/ 31 мая 2018

Ну, я только что выдал себя за ваш someone здесь :) вашим кодом, и ответ - да, он работает, после того как я изменил def myfunc(a: int, b:int): -> str на

def myfunc(a: int, b:int) -> str:

, иначе это синтаксическая ошибка.

...