Guido van Rossum:带回打印报表

2020-07-15 04:40:55

在Python3.10中,我们将不再受旧解析器的影响(尽管第三方工具需要迎头赶上)。PEG解析器在大约20行代码中实现的一件事与旧的print语句并不完全不同。我在darwinType";help";,";版权";,";Credits";或";License";上有一个原型:Python 3.10.0a0(head19fcc1a,jun 9 2020,16:31:17)[clang 11.0.0(clang-1100.0.33.8)]。>;>;>;print 2+24>;>;>;print";hello world>;>;print";hello";,input(";name:";)名称:Guidohello Guido>;>;>;print 1,2,3,9月=";,";1,2。使用相同语法可以调用*any*function:>;>;>;len";abc";3>;>;>;或任何方法:>;>;>;import sys>;>;>;sys.getrefcount";abc";24>;>;>;真的,*any*method:>;>;>;def foo(self,arg):打印参数.。不过,>;>;>;C().foo 2+24>;>;也有缺点。例如,您不能在没有参数的情况下调用方法:>;>;>;print<;内置函数print>;>;更糟糕的是,第一个参数不能以括号或方括号开头:>;>;>;print(1,2,3)1 2 3>;>;>;C().foo(1,2,3)trace。第1行,在<;模块>;TypeError:C.foo()接受2个位置参数,但给出了4个位置参数>;>;>;print(2+2),424(无,42)>;>;>;C().foo[0]traceback(最近一次调用):file";<;stdin>;";,行1,在<;模块&。不,今天不是4月1日。我是认真提出这一点的(但如果得到的回应是响亮的嘘声,我会撤回)。毕竟,我们目前在解析器中有很多复杂性,只是为了给出一个有用的错误消息来说明Python 2';的print语句:>;>;print 1,2,3 File";<;stdin&>&34;,第1行print 1,2,3^语法错误:调用';print';时缺少括号。您指的是print(1,2,3)吗?>;>;&。PEG解析器使这变得简单得多,因为它可以简单地回溯--通过将此语法的语法规则(暂定称为";call语句&34;)放在小语句备选列表的最后,我们确保validexpression语句(包括print()调用的所有内容仍然是具有完全相同含义的表达式语句,同时仍然允许无参数的函数调用,没有词法上的删节。(我的原型中没有检查打印后是否有空格的代码--它只检查名称后面是否有名称、数字或字符串,这从来不是合法的语法。)一个我没有追求的可能的扩展名(还没有--敢不敢!)。是允许在其他表达式内进行无参数调用。例如,我的原型不支持以下内容:>;>;>;a=(len";abc&34;)文件";<;stdin&>&34;第1行a=(len&34;abc&34;)^语法错误:无效语法&>我认为这在可用性和减少常见错误检测之间取得了合理的平衡。我也可以拨打它。c().foox';并且我们应该只允许带点的名称(足以访问导入的模块中的函数和对变量的方法调用)。或者我们应该只允许简单的名称(允许使用简单的名称,但不允许使用sys.getrefcount)。或者,也许我们真的应该只带回打印语句。我相信还有其他一些语言支持类似的语法(Ruby?R?Raku?)。但是我还没有调查过。想法?-Guido van Rossum(python.org/~guido)*代词:他/他**(为什么我的代词在这里?)*<;http://feministing.com/2015/02/03/how-using-they-as-a-sin.>;_Python-ideas邮件列表[email protected]要取消订阅,请发送电子邮件至[email protected] https://mail.python.org/mailman3/lists/python-ideas.pytho.Message,存档地址为https://mail.python.org/archives/list/python-ideas@python.。..行为准则:http://python.org/psf/codeofconduct/