Python:类型注释,如何定义元组的元素?

use*_*349 3 python static-typing type-annotation

这是一个最小的情况。

def foo(x:int, y:int) -> tuple: 
    return (x*y, y//2)
Run Code Online (Sandbox Code Playgroud)

能够编写-> tuple(:int, :int)无效格式的格式非常诱人。在这种情况下是否有正确的方法,还是在python沿着类型注释之路进一步移动之前它仍然是灰色区域?

编辑:显然有可能做类似的事情

def bar(x, y) -> ((str, int), (str, int)): 
     return ("%s+%s" %(x,y), x+y), ("%s-%s" %(x,y), x-y) 
Run Code Online (Sandbox Code Playgroud)

max*_*max 8

现在有一种方法可以注释这种情况:

from typing import Tuple
def foo(x:int, y:int) -> Tuple[int, int]: 
    return (x*y, y//2)
Run Code Online (Sandbox Code Playgroud)

注意:python运行时不会抱怨-> (int, int),但是根据PEP 484而言,它不是正确的类型注释。换句话说,如果您要使用类型提示来创建自己的微型语言,则可以使用它;但python输入标准(PEP 484)不接受。


Bro*_*ark 5

typing.Tuple从 Python 3.9 开始已弃用。您应该使用内置tuple类型(无需导入):

def foo(x:int, y:int) -> tuple[int, int]: 
    return (x*y, y//2)
Run Code Online (Sandbox Code Playgroud)

状态typing.Tuple文档:

自 3.9 版起已弃用: builtins.tuple现在支持下标 ( [])。请参阅PEP 585通用别名类型