深入探讨 Python 与 Perl 之争 – 我应该学习 Python 还是 Perl?
通常,当一种新的编程语言推出时,业界的一些天才们就会开始争论,他们将这种语言与已经扎根的语言进行比较。IT 行业经常会流传一种说法,人们经常会将新语言的各个方面(包括功能、语法、核心 CPU 和内存方面,包括 GC 时间等)与现有的同类语言进行比较。
过去有很多这样的例子,包括Java与C#、C++等之间的争论。其中一个引起广泛关注的案例是短时间内相继出现的两种语言之间的争论,即Python和Perl。
而Python最初被发明为 ABC 语言的后继者,仅仅是作者的一个“业余”编程项目(会吸引 Unix/C 黑客),他以他最大的明星Monty Python系列命名它。
建议阅读: Linux 中的 Python 编程和脚本入门
Perl大约在 2 年前才出现,是一种 Unix 脚本语言,旨在简化报告处理。它混合了多种语言,包括C、awk、sed和 shell 脚本。
值得注意的是,这些出于不同意图而发展起来的语言不断地被比较,这促使我去研究并找出其中的原因,下面列举一些重要的原因:
- 两者都以 Unix 操作系统为目标,一个用于黑客,另一个用于处理报告。
- 两者都是面向对象的(Python 更是如此)并且是解释性的,其中一个是强类型的,在编码方面很清晰,例如 Python,另一个允许使用括号来表示块,例如 Perl
- 原则上,两者是相反的,我们说,Perl 有很多种方法来完成一项任务,而 Python 只专注于一种方法来做事。
Python 与 Perl – 功能比较
让我们深入探讨这场争论,并尝试找出这两种语言彼此不同的整体方面。此外,让我们尝试找出行业中可以听到的许多陈词滥调的真相,例如“ Python 是带辅助轮的 Perl ”或“ Python 类似于 Perl 但有所不同”,以便我们能够尝试得出这个永无止境的争论的准确解决方案。
1. Python 的简洁语法 vs Perl 的复杂语法
在代码可读性方面,Python 比 Perl 具有巨大优势。即使多年后再阅读代码,Python 的代码也比 Perl 的代码清晰得多。
通过缩进表示代码块和适当的结构,Python 的代码更加简洁。另一方面,Perl 的语法借鉴了各种编程语言,如 C、shell 脚本,甚至在正则表达式方面借鉴了awk和sed过滤器。
建议阅读: 用于日常 Linux 系统管理任务的 15 个有用的 'sed' 命令
除此之外,由于‘{‘ and ‘}’
表示代码块并且‘;’
在每行末尾添加不必要的内容,由于允许丑陋的脚本,如果您在几个月或几年后阅读 Perl 中的代码,可能会很难理解。
2. Perl 的内置与 Python 的第三方正则表达式和操作系统操作支持
Perl 语言借用了C和其他UNIX命令(如sed、awk等)的语法,因此它具有强大且内置的正则表达式支持,无需导入任何第三方模块。
此外,Perl可以使用内置函数处理 OS 操作。另一方面,Python有用于这两种操作的第三方库,即用于正则表达式的re和用于 os、sys 的 os 操作,在执行此类操作之前需要确保这些库可用。
Perl 的正则表达式操作具有类似“ sed ”的语法,这不仅可以简化搜索操作,还可以比 python 更轻松、更迅速地完成对字符串的替换、替代和其他操作,而使用 python 时,人们需要了解和记住满足需要的函数。
示例:考虑在 Perl和Python中搜索字符串中的数字的程序。
Import re str = ‘hello0909there’ result = re.findall(‘\d+’,str) print result
$string = ‘hello0909there’; $string =~ m/(\d+)/; print “$& \n”
您会发现Perl的语法非常简单,并且受到sed 命令的启发,它利用了Python导入第三方模块“re”的语法。
3. Python 的高级 OO 编程 vs Perl 的单行程序
Python 的一个特点是其高级编程能力,这让它比Perl更胜一筹。Python具有广泛的面向对象编程支持,语法清晰一致,而Perl中的对象已经过时,因为包被用来替代类。OO
OOP
建议阅读: Python Django Web 框架入门
此外,OO
用 Perl 编写代码会增加代码的复杂性,最终使代码变得难以理解,甚至 Perl 中的子程序也很难编程,最终很难理解。
另一方面,Perl 最棒的地方在于它的单行代码,可以在命令行上使用,执行各种任务。此外,Perl 代码最终可以用比 Python 更少的代码行来完成各种任务。
这两种语言的短代码示例强调了 Perl 能够用更少的 LOC 完成更多工作的能力:
try: with open(“data.csv”) as f: for line in f: print line, except Exception as e: print "Can't open file - %s"%e
open(FILE,”%lt;inp.txt”) or die “Can’t open file”; while(<FILE>) { print “$_”; }
优点和缺点——Python 与 Perl
在本节中,我们将讨论 Python 和 Perl 的优缺点。
Python优点:
- 它具有干净而优雅的语法,这使得该语言成为想要亲身体验任何编程语言的新手的第一个编程语言的绝佳选择。
- 具有非常先进和固有的
OO
编程能力,而且 Python 中的线程编程比 Perl 好得多。 - 在许多应用领域中,Python 是首选,甚至优于 Perl。例如: Perl 是 CGI 脚本的首选,但如今Python 的 Django和web2py等 Web 脚本语言越来越受欢迎,并受到业界的极大关注。
- 为不同的编程语言(如CPython、IronPython和Jython)提供了多个SWIG包装器,并且这些包装器的开发先于 Perl 的 SWIG 包装器的开发。
- 即使您阅读别人的代码,甚至多年后阅读自己的代码,Python 代码也总是缩进良好且易于阅读和理解。
- Python 适用于大数据、基础设施自动化、机器学习、NLP等各种应用,由于是开源的,它得到了活跃社区的大力支持。
Python缺点:
- 在少数情况下,Python 的执行速度通常比 Perl 慢,包括正则表达式和基于字符串的操作。
- 有时很难获取 Python 中的变量类型,因为在代码非常大的情况下,您必须到最后才能获取变得混乱和复杂的变量类型。
Perl 的优点:
- Perl 具有强大的单行语言,甚至确保类似 UNIX 管道的语法,可以在命令行上使用来执行各种任务,而且它受到 Unix 及其命令行编程的影响,因此在其编码中集成了许多受 UNIX 影响的命令。
- Perl 以其强大的正则表达式和字符串比较操作而闻名,因为它受到sed和awk等强大的 UNIX 工具的影响。在正则表达式和字符串操作(如替换、匹配、替换)方面,Perl 的表现优于 python,后者需要几行代码才能实现相同的功能。此外,许多文件 I/O 操作和异常处理在 Perl 上的速度更快。
- 说到报告生成语言,Perl 自推出以来就一直享有盛誉,因为作者开发 Perl 等语言的主要原因之一就是用于报告生成。
- Perl 的应用领域非常广泛,包括网络编程、系统管理、CGI 脚本(这里 Python 正在用 Django 和 web2py 超越 Perl)等等。
- 通过 Perl 在变量前面使用的符号可以很容易地识别变量的类型,例如:
‘@’
识别数组和‘%’
识别哈希。
Perl 的缺点:
- Perl 的代码非常复杂,新手很难理解。对于经验不足的程序员来说,子程序,甚至其他符号(例如:
‘$`’
等‘$&’
)都很难理解和编写。此外,除非您拥有丰富的经验,否则阅读 Perl 代码时会很难理解且很复杂。 - Perl 中的OO编程有点过时了,因为它从未以OO编程而闻名,并且许多操作(例如线程)在 Perl 上也不太明显。
结论
从上文可以看出,这两种语言在目标应用程序方面都表现出色,Python因其代码干净且易于理解而比Perl更具优势,成为新手的首选,而另一方面,在字符串操作和一些适用于类 UNIX 操作系统的高级单行程序以及其他各种众所周知的操作方面,Perl 的表现优于 Python。
所以,最终一切都取决于你瞄准的特定领域。欢迎你对本文发表评论,并请你发表你对这个话题的看法,看看你认为 Python 胜出还是 Perl 胜出。