2015-01-30 7 views
2

최소한의 경우입니다.Python : 주석, 튜플의 요소를 정의하는 방법을 입력 하시겠습니까?

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

그것은 유효한 포맷하지 않은 -> tuple(:int, :int)을 쓸 수있게 된 것을 매우 유혹. 이 경우 올바른 접근 방법이 있습니까, 아니면 파이썬이 유형 주석 도로를 따라 내려갈 때까지 여전히 회색 영역입니까?

편집 : 그것은 등

def bar(x, y) -> ((str, int), (str, int)): 
    return ("%s+%s" %(x,y), x+y), ("%s-%s" %(x,y), x-y) 
+0

최근에 많이 개발 된 관련 [PEP] (https://www.python.org/dev/peps/pep-0484/)를 참조하십시오. 정말 궁금하다면, [python-ideas list archives] (https://mail.python.org/pipermail/python-ideas/2015-January/thread.html)에서 확인할 수 있습니다. Guido는 thread는이 PEP에 대해 2015 년 1 월 중순에보고합니다. –

답변

2

이 경우에 주석을 달 수있는 방법이 지금있다 :

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

참고 : 파이썬 실행 시간은 약 -> (int, int) 불평하지 않을 것이다, 그러나 그것은 즉 PEP 484에 따라 올바른 유형의 주석 아니라, 당신은 당신 자신의 목적을 위해 타입 힌트를 사용하여 미니 언어를 만들고 싶다면 그것을 사용할 수 있습니다; 파이썬 타이핑 표준 (PEP 484)에서는 허용되지 않습니다.

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) 

모두.

+0

나는 단지 멋진 주석 구문으로 제공되는 것이 아니라 어떤 시점에서 실제 입력 및 반환 유형이 시행되기를 희망합니다. – user3467349

+2

어, 나는 그다지 열망하지 않습니다. 이것은 파이썬의 동적 타이핑의 목적을 무너 뜨 렸으며 언어의 큰 특징을 망치고 있습니다. static typing을 원한다면 Java 또는 C++ (일반적으로 둘 다 더 빠름)를 사용하지 않는 것이 좋습니다. 파이썬은 동적이기 때문에 훌륭합니다. 물론, 그건 제 의견입니다. :) – iCodez

+0

명확히해야한다, 나는 단지 (주석이 달린 코드에) 강제되었다는 것을 의미했다. 나는 def foo() -> int :'를 쓸 수 있고'str'을 반환 할 수 있다는 것이 정말로 이상하다. 아마 그 일은 자주 일어나지 않을 것입니다. 그러나'float'을 반환하는'def foo() -> int'는 아마도 그렇게 할 것입니다. – user3467349