相关疑难解决方法(0)

Python 类型:连接序列

在 python 中,两个序列的连接通常由+操作符完成。但是,mypy 抱怨以下内容:

from typing import Sequence

def concat1(a: Sequence, b: Sequence) -> Sequence:
    return a + b
Run Code Online (Sandbox Code Playgroud)

没错:Sequence没有__add__. 但是,该函数对于“通常的”序列类型list, str,工作得非常好tuple。显然,还有其他序列类型不起作用(例如numpy.ndarray)。解决方案可能是以下内容:

from itertools import chain

def concat2(a: Sequence, b: Sequence) -> Sequence:
    return list(chain(a, b))
Run Code Online (Sandbox Code Playgroud)

现在,mypy 没有抱怨。但是连接字符串或元组总是给出一个列表。似乎有一个简单的解决方法:

def concat3(a: Sequence, b: Sequence) -> Sequence:
    T = type(a)
    return T(chain(a, b))
Run Code Online (Sandbox Code Playgroud)

但是现在 mypy 不高兴了,因为 T get 的构造函数参数太多。更糟糕的是,该函数不再返回序列,而是返回一个生成器。

这样做的正确方法是什么?我觉得问题的一部分是 a 和 b 应该具有相同的类型,并且输出也将是相同的类型,但是类型注释并没有传达它。

注意:我知道使用''.join(a, b). 但是,我选择这个例子更多是为了说明目的。

python mypy python-typing

4
推荐指数
2
解决办法
544
查看次数

标签 统计

mypy ×1

python ×1

python-typing ×1