Python3.8让我再次伤心

2020-08-16 19:30:57

看到Python3.8中的一些“令人兴奋”的特性,我仍然对…语言感到失望和沮丧。就像其他几种语言一样。

作为另一种编程语言的作者,我无法停止从我的角度思考事情“应该如何做”。我想在这里直截了当地说。我的观点偏向于正确和“你他妈的在做什么?”因此,这里的所有东西都要加适量的盐。

有了新的语法:=,它将值作为更大表达式的一部分赋给变量。

“有人”忽略了Lisp的智慧,即“一切都是表达式,计算结果是一个值”(无语句vs表达式),并在几年前用Python进行了赋值。现在,这不能以一种直接的方式解决。它一定是另一种语法。对于几乎相同的事情有两种不同的语法,即=表示语句赋值,而:=表示表达式赋值。

有一个新的函数参数语法/,用于指示某些函数参数必须按位置指定,不能用作关键字参数:

Def(a,b,/,c,d,*,e,f):print(a,b,c,d,e,f)。

试图清理由于混合位置参数和命名参数而造成的混乱。不幸的是,我当时没有给予足够的考虑,并且复制了Python中处理行为的参数。现在NGS也有与Python 3.8之前相同的问题。希望我能够以比Python更优雅的方式修复它。

Lru_cache()现在可以直接用作修饰符,而不是用作返回修饰符的函数。因此,现在支持这两种功能。

If isinstance(maxSize,int):#如果maxSize<;0:maxSize=0,则#负maxSize被视为0。

如果您将LRU缓存大小设置为负数,则会错误地将其设置为99%。在NGS中,这将是一个例外。当未设置myolder时,这就是导致rm-rf$myFolder/删除/的方法。注意,maxSize代码并不新鲜,但它在Python3.8中仍然存在。我猜这是另一个错误,现在不能轻易修复,因为那会破坏“正常工作”的代码。

Namedtuple()的_asdict()方法现在返回一个dict,而不是Collection tions.OrderedDict。这之所以有效,是因为从Python 3.7开始,常规字典就保证了排序。

Ruby在2008年发布了1.9版(根据帖子)修复了这个问题。

Python在2018年发布了3.7版(我认为这是10年的“见鬼的开发者”)修复了这个问题。

NGS从一开始就订购了地图,但这不是一个公平的比较,因为NGS项目始于2013年,当时这个错误已经被理解。

读者们,这一切对你们有什么帮助呢?我鼓励对您使用的编程语言的选择进行更深入的思考。在我看来,所有的语言都很烂,而NGS的目标是在预期的用例中比其他语言更烂(tl;dr-for DevOps脚本)。