PEP Idea: Better return type annotation syntax

With the recent submission of [PEP 677][1], I was reminded of an idea I had with function annotation syntax since the very beginning: why not let me write: ```python def f() -> tuple[int, str]: return 42, 'foo' ``` as: ```python def f() -> (int, str): return 42, 'foo' ``` Is there any inherent reason for this, other than that it isn't an actual "type"? I think it looks much cleaner, and if there isn't any drawbacks to adding this syntax, I'd love to work on bringing this to life. [1]: https://www.python.org/dev/peps/pep-0677/

On Thu, Jan 6, 2022 at 10:44 PM Tushar Sadhwani < tushar.sadhwani000@gmail.com> wrote:
I like this too. A practical issue is that list[(a, b)] and list[a, b] look the same to the compiler, but they would mean very different things. It's not obvious how to fix this in a backward-compatible way.

Jelle Zijlstra wrote:
Restricting it to only the top level of a return type annotation should do the trick! Such that: def f() -> (X, Y, Z): ... is interpreted as tuple[X, Y, Z], but: def f(x: (X, Y, Z)) -> None: ... def f() -> Union[int, (X, Y, Z)]: ... def f() -> list[(X, Y, Z)]: ... Are not considered as tuple[...]

On Thu, Jan 6, 2022 at 10:44 PM Tushar Sadhwani < tushar.sadhwani000@gmail.com> wrote:
I like this too. A practical issue is that list[(a, b)] and list[a, b] look the same to the compiler, but they would mean very different things. It's not obvious how to fix this in a backward-compatible way.

Jelle Zijlstra wrote:
Restricting it to only the top level of a return type annotation should do the trick! Such that: def f() -> (X, Y, Z): ... is interpreted as tuple[X, Y, Z], but: def f(x: (X, Y, Z)) -> None: ... def f() -> Union[int, (X, Y, Z)]: ... def f() -> list[(X, Y, Z)]: ... Are not considered as tuple[...]
participants (2)
-
Jelle Zijlstra
-
Tushar Sadhwani