13

这是一个最小的案例。

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) 
4

2 回答 2

25

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

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)接受。

于 2017-04-16T23:41:26.817 回答
2

不,目前还没有规范的方法来做到这一点。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)

这两个都非常清楚地传达了您的意图。

于 2015-01-30T18:23:53.490 回答