Python从3.5版本开始支持type hints

# type_hint.py
def foo(a: str) -> str:
    print(a)

def bar(b) -> str:
    print(b)
    return 0

但并不会强制进行检查,也就是说类型不一致并没有什么发生

但是使用cython编译后,一切就会不一样

# setup.py
from distutils.core import setup

from Cython.Build import cythonize

setup(ext_modules=cythonize('./type_hint.py', compiler_directives={'always_allow_keywords': True}))
>>> python3 setup.py build_ext --inplace

再对编译后的.so文件进行调用

>>> import type_hint
>>> type_hint.foo(123)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-2-34d9c4e717cc> in <module>
----> 1 type_hint.foo(123)

TypeError: Argument 'a' has incorrect type (expected str, got int)
>>> import type_hint
>>> type_hint.bar('a')
a
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-4-e8fb7c0cdcb3> in <module>
----> 1 type_hint.bar('a')

~/Git/test/cython_test/type_hint.cpython-38-darwin.so in type_hint.bar()

TypeError: Expected str, got int

如果参数类型或返回类型与声明的不一致则会报错

注意:并不是所有的类型都会进行类型检查

typehint input TypeError?
int str n
int list n
str int y
float str y
float bool n
dict str y
set str y
set dict y
list str y
bool str n

参考:https://github.com/cython/cython/issues/3130#issue-489331603

Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐