我假设标准库类型提示支持完全基于读取像inspect
那样的普通源代码,但我查看了标准库中的typing.py,看起来编译器确实存储了类型提示对象本身的信息。
所以,如果我这样做:
def myfunc(a: int, b:int): -> str
return "{a} + {b} = {a+b}"
然后将其编译为.pyc文件,类型信息是否存在,以至于我给.pyc文件的人可以使用typing.get_type_hints()
之类的东西来访问它? (假设我有正当理由只分发.pyc。)
答案 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:
否则是语法错误。