I've recently noticed something interesting when looking at the Python 3.3 grammar specification:
funcdef: 'def' NAME parameters ['->' test] ':' suite
The optional 'arrow' block was absent in Python 2 and I couldn't find any information regarding its meaning in Python 3. It turns out this is correct Python and it's accepted by the interpreter:
def f(x) -> 123:
return x
I thought that this might be some kind of a precondition syntax, but:
I cannot test x here, at it is still undefined,
No matter what I put after the arrow (e.g. 2 < 1), it doesn't affect the function behaviour.
Could anyone accustomed to this syntax explain it?