.pyc 文件是否包含类型提示信息?
Do .pyc files contain type hinting information?
我假设标准库类型提示支持都是基于阅读普通源代码,就像 inspect
对某些事情所做的那样,但我查看了标准库中的 typing.py,似乎编译器确实如此在对象本身上存储类型提示信息。
所以,如果我这样做:
def myfunc(a: int, b:int): -> str
return "{a} + {b} = {a+b}"
然后将其编译为 .pyc 文件,类型信息是否会保留下来,以便我提供 .pyc 文件的人可以使用 typing.get_type_hints()
之类的东西来访问它? (假设我有正当理由只分发 .pyc。)
好吧,我刚刚在这里用你的代码模拟了你的 someone
:) 答案是肯定的,在我改变
def myfunc(a: int, b:int): -> str
至
def myfunc(a: int, b:int) -> str:
否则就是语法错误
您已经在这里回答了您的问题:
但我查看了标准库中的 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}
我假设标准库类型提示支持都是基于阅读普通源代码,就像 inspect
对某些事情所做的那样,但我查看了标准库中的 typing.py,似乎编译器确实如此在对象本身上存储类型提示信息。
所以,如果我这样做:
def myfunc(a: int, b:int): -> str
return "{a} + {b} = {a+b}"
然后将其编译为 .pyc 文件,类型信息是否会保留下来,以便我提供 .pyc 文件的人可以使用 typing.get_type_hints()
之类的东西来访问它? (假设我有正当理由只分发 .pyc。)
好吧,我刚刚在这里用你的代码模拟了你的 someone
:) 答案是肯定的,在我改变
def myfunc(a: int, b:int): -> str
至
def myfunc(a: int, b:int) -> str:
否则就是语法错误
您已经在这里回答了您的问题:
但我查看了标准库中的 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}