我正在尝试使用Cython加快PEP 484类型的python脚本的速度。我想保持一些语义和可读性。
之前,我有一个>
Flags = int def difference(f1: Flag, f2: Flag): return bin(f1 ^ f2).count("1")
现在此函数被频繁调用,并且是使用Cython在C中进行轻微重构和编译的自然候选者,但是我不想丢失
f1
和f2
是标志集合的信息。因此,我显然尝试过
import cython Flags = cython.int def difference(f1: Flag, f2: Flag): return bin(f1 ^ f2).count("1")
现在,
mypy
失败,抱怨
flags.py:5: error: Variable "flags.Flags" is not valid as a type flags.py:5: note: See https://mypy.readthedocs.io/en/latest/common_issues.html#variables-vs-type-aliases flags.py:6: error: Unsupported left operand type for ^ (Flags?)
没有该类型别名的地方
import cython def difference(f1: cython.int, f2: cython.int): return bin(f1 ^ f2).count("1")
该模块检查得很好(除了缺少
cython
的库存根,]。
这里发生了什么?类型别名的意义不在于行为上应该没有区别吗?
我正在尝试使用Cython加快PEP 484类型的python脚本的速度。我想保持一些语义和可读性。以前,我有一个Flags = int def差异(f1:标志,f2:标志):return bin(...
[我假设您的示例中的错字(“标志”与“标志”)是无意的,并且与您的问题无关-一旦改正,我就可以对您的问题进行复述。