【Py】cython编译后解释器会对某些类型进行类型检查

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

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

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

typehintinputTypeError?
intstrn
intlistn
strinty
floatstry
floatbooln
dictstry
setstry
setdicty
liststry
boolstrn

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值