.pyc文件是否包含类型提示信息?

时间:2018-05-31 19:24:09

标签: python python-3.x type-hinting pyc

我假设标准库类型提示支持完全基于读取像inspect那样的普通源代码,但我查看了标准库中的typing.py,看起来编译器确实存储了类型提示对象本身的信息。

所以,如果我这样做:

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

然后将其编译为.pyc文件,类型信息是否存在,以至于我给.pyc文件的人可以使用typing.get_type_hints()之类的东西来访问它? (假设我有正当理由只分发.pyc。)

2 个答案:

答案 0 :(得分:3)

您已在此处回答了您的问题:

但我查看了标准库中的typing.py,似乎编译器确实在对象本身上存储了类型提示信息。

这意味着键入信息不会丢失并使用其余代码进行编译,这是一种明显的行为。您可以通过从python文件创建.pyc文件然后导入已编译的模块并按如下方式对其进行测试来测试它。另请注意,代码中存在语法错误。您应该在:之后移动-> 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}

答案 1 :(得分:0)

我刚刚用你的代码模仿了你的someone :),答案是肯定的,我改变了 def myfunc(a: int, b:int): -> str

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

否则是语法错误。

相关问题