
On Tue, Jun 09, 2020 at 05:06:37PM -0700, Guido van Rossum wrote:
But wait, there's more! The same syntax will make it possible to call *any* function:
len "abc" 3
As you point out later on, there are issues with zero-argument calls and calls where the first argument starts with parens. Ruby allows parens-less function calls. Run this in Ruby and weep: #!/usr/bin/ruby def a(x=4) x+2 end b = 1 print "a + b => ", (a + b), "\n" print "a+b => ", (a+b), "\n" print "a+ b => ", (a+ b), "\n" print "a +b => ", (a +b), "\n" For those who don't have Ruby installed, here is the output: a + b => 7 a+b => 7 a+ b => 7 a +b => 3 In case it's not obvious, the problem isn't the call to print, but the call to function `a`. (Tested in Ruby 2.5). There's also yet another precedence rule to learn: sqrt x + 1 means what? Given Python's execution model where we have statements and functions, I think that it is a feature that they have different syntax. If I see words separated by spaces: import math del spam while condition if obj assert condition I know that they are special syntactic forms, even if I'm reading code using some new statement I had missed learning about: # Python 7 code, fallen through a wormhole require thing demand permission spam contacts verb object I don't think we should give up that nice clean distinction between function calls which always require parens, and statements which don't require parens, merely to add a second way to call functions that saves one char: func(x) func x I'd be more interested in the idea if there was more benefit than just the avoidance of a pair of parens. Something that either can't be done at all, or can only be done with difficulty. Something like IPython's %magic syntax perhaps? -- Steven