【问题标题】:Python force tuple return type to required one use one linePython强制元组返回类型为必需的一次使用一行
【发布时间】:2021-12-27 19:48:47
【问题描述】:

我有一个函数

function(input: str) -> Tuple[str, str]:

    return tuple(x for x in input.split(",")) 

输入总是'value1,value2',但是,我收到一条错误消息:“Tuple[str, ...]”,预期为“Tuple[str, str]”)

是否有强制返回类型为预期的只使用一行代码?

【问题讨论】:

    标签: python python-3.x list tuples


    【解决方案1】:

    解释器不知道x for x in input.split(",") 会产生多少元素——从它的角度来看,input 可以是任何东西。因此,它将返回的类型归类为Tuple[str, ...]。

    要让它使用 Tuple[str, str] 的返回类型,您将方法标记为,您需要明确地返回两个元素:

    def function(input: str) -> Tuple[str, str]:
        tup = input.split(',')
        return (tup[0], tup[1])
    

    否则,对方法进行不同的注释。


    作为单行,您可以使用列表切片:

    def function(input: str) -> Tuple[str, str]:
        return tuple(input.split(','))[:2]
    

    【讨论】:

    • 谢谢,我在考虑不要复制split的功能第二个不起作用,仍然得到同样的错误
    • 你应该切片元组,而不是tuple的输入。
    • 注意:input.partition()[::2] 将成功保证恰好两个元素并且不会丢失数据。
    • @chepner:首先切片意味着创建(可能)较大的 tuple 仅用于切片的工作更少。
    • 但有必要让类型检查器满意,不是吗? (您可以对两者都进行切片,或者使用input.split(",", 1);任何一个都对如何处理包含多个, 的字符串做出不同的假设。)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-27
    • 1970-01-01
    • 2019-11-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多