Python:Type Annotations,如何定义元组的元素?

时间:2015-01-30 18:10:57

标签: python static-typing type-annotation

这是一个极小的案例。

def foo(x:int, y:int) -> tuple: 
    return (x*y, y//2)

能够编写不是有效格式的-> 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) 

2 个答案:

答案 0 :(得分:7)

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

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

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

答案 1 :(得分:1)

不,还没有规范的方法来做到这一点。 Python类型注释是该语言的一个相对较新的补充,因此它们仍然有限。

目前,您可以使用元组文字:

def foo(x:int, y:int) -> (int, int):
    return (x*y, y//2)

那,或者是字符串文字,例如:

def foo(x:int, y:int) -> 'tuple(int, int)':
    return (x*y, y//2)

这两个都很清楚地传达了你的意图。