Python不应作为基础语言教授

2020-06-24 21:17:58

让我在开篇前给计算机科学/工程专业加上#34;。我认为Python是一种很好的语言,在很多情况下都非常有用,但我也认为使用Python作为基础语言会给学生带来很多不必要的麻烦。

我对Python的主要不满是语法和语义。Python如下所示:

def ome_func(var_one,var_Two):对于范围(10)内的i:num=I print(I)#我们仍然可以看到num here print(Num)ome_func(";thing1";,";thing2";)。

一开始您就应该注意到一些事情,缺少类型、函数范围和花括号。我可以克服的类型问题是,Python应该是动态类型的,它不像JavaScript那样奇怪,而且它最近添加了对在函数参数中定义变量类型的支持,所以在我的书中它是可以的。

然而,Python确实遇到了与JavaScript相同的作用域问题,并且作用域是在函数级别而不是块级别上完成的。这可能会令人困惑,特别是因为Python更进一步,完全去掉了var,let,const关键字,这意味着Python中甚至没有常量变量的概念。

最后,与您可能见过的大多数语言最明显的区别是没有大括号。这是因为Python认为使用空格而不是将所有内容都放在大括号中来管理块将是一个有趣的想法。理论上,这看起来似乎没问题,因为您应该已经正确地缩进了代码块,但是实际上,我发现它的易读性要差得多,使用起来也更加笨拙。

Python还决定超越其他语言,以不同于大多数其他语言的方式行事。部分原因是打破了C风格的语法,而且它们的命名也不同。例如,在几乎所有主流语言中被称为数组的东西,在Python中被称为列表。通常称为";Map&34;或";HashMap&34;的键值存储改为称为";Dictionary&34;。

然后是字符串,Python中的字符串过于复杂。在大多数语言中,您可以有一个单一字符的char,您可以有一个char[]或一个字符数组,然后是一个字符串,它通常是对常规char[]的一些花哨的包装。在大多数主流语言中创建字符串时,您通常可以按照var s=";string";或对于字符,通常使用单引号var c=';c';来创建字符串。Python认为这太简单了,而且不够具体。您可以使用s=";string";方法创建字符串,也可以使用单引号s=#39;string';或者,如果您需要Unicode字符串,您可以使用uni=u';Unicode';,或者您可以手工创建一个二进制字符串bin=b';。您还可以直接告诉它您要使用哪种编码,utf=";某个字符串";.encode(";utf-8";)。您还可以使用string=str(";thing";)转换为字符串,因为为什么不添加另一种方法呢?现在,我并不是说详细说明您正在使用的编码方式是不好的,但也许您可以让它更清楚一些,或者使用更通用的语法。

Python的另一个问题是,它本质上是两种不同的语言,分别是Python2.7和Python3+。使用Python<;=2.7编写的代码有时可以在Python3+上运行,而使用Python3+编写的代码有时可以在Python<;=2.7上运行。这是因为引入了相当多的突破性改变,使得许多在2.7中起作用的特性不再起作用,或者在3+中不再起作用。这就像打印功能现在的工作方式不同一样简单,例如:

将使用Python<;=2.7工作,但是对于Python 3+,这将引发语法错误,这是您必须执行的操作。

Python2中的另一个流行特性是xrange,它基本上在for循环中创建了一个有用的、比range更快的可迭代对象。但是,在Python3中简单地删除了它。因此,如果我想要编写与上面相同的代码以与Python2.7兼容,我会这样做:

def ome_func(var_one,var_Two):对于xrange(10)中的i:num=I print I#我们仍然可以在此处看到num print num Some_func(";thing1";,";thing2";)。

对于语言来说,引入向后不兼容的新功能是很常见的。尤其是有重大修订的时候。然而,破坏语言中如此多的广泛使用的部分是相当不常见的,以至于在3之前编写的大多数代码根本不能在较新的解释器上运行。事实是,太多的东西被破坏了,社区基本上分裂了,许多人仍然使用Python2.7,因为他们的库不能在3+上工作,或者他们不想为了向后兼容而维护他们的代码库的2个版本。这意味着,即使您使用Python编写代码,根据您选择的版本,您也会将自己与您可以使用的库或依赖项的子集隔离开来。

所有这些问题,甚至更多,都给新程序员带来了一些令人头疼的问题。如果您从学习Python作为基础语言开始,当您不可避免地切换到另一种语言(如C++或Java)时,您还必须在更难的概念之上学习全新的词汇和语法。Python的许多怪癖和不规则性也不会让它成为从一开始就可以学习的最简单的语言。