
Hi, I dislike "postdef"; it and the leading colon are both mysterious. I guess that's because I find both of them visually misleading. In the case of ":", the colon visually binds to the first token, so :x = whatever(@...) looks like an assignment to ":x" and my brain immediately goes "What's :x?" I have to really work to force myself to make the tiny little ":" bind looser than everything else on the line. In the case of "postdef", the Python syntactic tradition is that a keyword at the beginning always means "this is a statement" and always describes the type of statement. "postdef" breaks both of these rules. This: postdef return whatever(@...) is NOT a postdef statement, it's a return statement. And this: postdef button.add_handler(@...) is not even a statement! It's an expression. ==== Finally, there's a grammar problem that hasn't been addressed yet. What about multi-line statements? Can you write: :if do_something(sorted(items, key=@)): def sort_key(item): # ??? where to indent this? .... # sort_key body ... # if body I sure hope not! ==== All of the above is making me really like the syntactic variations that put the ":" at the end of a line. This is visually natural to me: a colon introduces a block, and that's a good approximation of what is happening here. It also clearly demands one level of indentation, which seems like a good idea. And it has this nice property that it signals when you are allowed to use it: on any line that doesn't *already* end with a colon. If we made that the rule, then post-definitions would be allowed in these kinds of statements, which seems reasonable: assert assignment del exec expression global nonlocal print raise return yield --Ping