mypy不喜欢别名的Cython类型

问题描述 投票:1回答:1

我正在尝试使用Cython加快PEP 484类型的python脚本的速度。我想保持一些语义和可读性。

之前,我有一个>

Flags = int

def difference(f1: Flag, f2: Flag):
    return bin(f1 ^ f2).count("1")

现在此函数被频繁调用,并且是使用Cython在C中进行轻微重构和编译的自然候选者,但是我不想丢失f1f2是标志集合的信息。因此,我显然尝试过

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(...

cython typechecking mypy type-alias
1个回答
0
投票

[我假设您的示例中的错字(“标志”与“标志”)是无意的,并且与您的问题无关-一旦改正,我就可以对您的问题进行复述。

© www.soinside.com 2019 - 2024. All rights reserved.