你喜欢Python还是Perl?为什么?

Python013

你喜欢Python还是Perl?为什么?,第1张

这两个相比,我喜欢python,因为我不会Perl。。。

Perl没有用过,只是听以前的老江湖们谈起过,据说很多年没更新,但是Unix系统(不是Linux)的维护管理用这货很方便。

python,写了差不多2年。刚开始写的时候,身边找不到几个小伙伴写python的,但是现在,2016年底,很多人开始讨论要不要学python,手快的已经写了自己的代码玩了。所以我重点说说我为啥喜欢python好了。

好入门,写起来爽。人都懒(懒推动了科技的进步),省下的时间用来干更有意义的事情,我想没有几个人会拒绝。

开源,跨平台。开源和跨平台是技术发展趋势,可以参照.net和swift,微软和苹果这么固执的大公司都遵循这个趋势,码农的技术嗅觉是要有的。

庞大的第三方库,这点仅次于大java,也是最近python火起来的最大原因。大数据,深度学习,各种开源大牛的技术积累。以前大家谈python,就是写个系统维护脚本,爬虫,搞个web,但是现在谈到python,基本就是大数据和深度学习里各种牛逼闪闪的框架,大数据有spark,深度学习TF,caffe,theano还有大百度的paddlepaddle,手册上一定都写的支持python,大家可以看看身边的小伙伴,有谁用Perl去搞这几个框架的(也不支持)。

“人生苦短,我用python”

说了这么多,也吐槽一下python吧

强制缩进,不支持大括号,用冒号(我写了2年,还是觉得大括号好,很多有强迫症的朋友也是因为这个放弃的,还好我没有强迫症。。。)

GIL,不过这个问题倒不是很重要,毕竟本来性能就不是python的强项

最后,给想入门python的小伙伴提供一下个人经验

版本问题不要纠结,2,3都很好(我之前用2.7,现在用3.5),重要的是动手去写

编辑器我一开始用vim,但是很明显我的vim水平很渣,所以用了ST,感觉不错,后来又用过VSCode,目前用Atom。这几个都很好,我后来用Atom的原因是因为插件,尤其是regex-railroad-diagram,因为平时工作需要写些正则,我已经离不开它了。还有platformio-ide-terminal,atom-material-ui ,platformio-ide-terminal(好像有点跑题了,如果有用Atom的小伙伴欢迎告知你觉得好用的插件啊,好东西要大家分享)

入门的话,可以从处理个文本开始,然后写个爬虫,找找成就感,感觉找到了,然后就有动力开始在python的世界里狂奔了

hell,python和perl我三种都学了,而且前两种自认为用的还比较熟练,觉得自己还是应该有点发言权的,对SA来说,平时管理系统用SHELL脚本肯定是最简单的,如果是纯粹的系统管理,很少有问题是shell解决不了的,如果认为写一些系统管理脚本shell解决不了,说明你对shell还不够熟练,那么python和perl呢?

我对python和perl没有什么偏好,最终选择了python主要还是python比perl简单,看完python的入门书后,过一段时间还能记得怎么写程序,但看完perl的入门书后,过一两个月就忘记的差不多了,要重新开始看。

我用python主要解决用shell解决起来比较麻烦或者通用性不好的问题,比如处理文本,要用到awk或者sed的高级功能才能实现时,我宁愿用python实现。至于效率嘛,用到需要高效率的程序,我直接用C语言写。perl的粘滞性比较好,如果要在程序中大量用到系统命令,那么perl肯定比python方便多了。

一:Python 与 Perl对比

(1)设计一个语言的初始目的决定了该语言将会内建什么功能:

perl初始是Larry为了格式化处理文本而创建的,所以内建了正则 ;python内建一个复数型别,猜测Guido最初一定是为了数值计算而创建了python。因此perl擅长文字处理,python擅长数值处理。

(2)应用领域和需求不一样:

Perl 设 计之初就是为了方便编写复杂高效的系统脚本,它也是应该最为广泛的脚本编程语言。它在编程方面相当于瑞士军刀,对字符、文本文件处理能力很强,以前要求 shell+sed+awk+C才能完成的任务,只需perl脚本就可以完成了。而且应用领域一直在拓宽,支持面向对象程序设计。

Python 面向对象的动态公共语言,适于脚本编程和快速开发,它最显著的特点是作为编译语言(如C)和脚本语言(如perl)之间的桥接语言,它具有的强大功能,可扩充性及面向对象的特征使其成为大规模应用程序开发工具。

(3) 关于强类型

Perl语言中,数据的类型,取决于数据所处的上下文。

Python语言中,数据类型,是数据自身确定的。Python因此一般被认为是强类型语言,而Perl则不是。

(4)关于 内置基础类型

Perl的基础类型叫做scalar,这是为了和后面的array和hash做区别。scalar可以是数字,也可以是字符串。基本上说,scalar非此即彼;换句话说,scalar既是数字,又是字符串。scalar到底是字符串,还是数字,完全取决于使用scalar的上下文,如果是一个处理字符串的函数,那么它是字符串;如果是一个处理数字的函数,那么它是数字。Perl会尽一切努力完成它们之间的转化,无论在你看来有多么荒诞。 Perl中,所有scalar都以$开头,所有以$开头的都scalar。

Python的基础类型,同样,不是数字,就是字符串。但是,不可能既是数字,又是字符串。Python会判断变量到底是数字,还是字符串,以此来选择怎么解释函数;如果它找不到一个合适的解释,那么Python会抛出异常。一般来说,这种策略能够取悦一部分程序员,同时让另外一部分人感觉很不爽。

(5)关于复合类型

Perl有两种复合类型:array和hash。Python有三种复合类型:tuple, list, dict。 Python中的tuple+list,完全对应于Perl中的array;因此不存在谁提供的类型更丰富这样的问题。

(6)关于做为整体的list

Perl中,用@开头的名字表示整个array,据说是因为@是array的字头。但是,又根据Perl的原则,@foo这样的array也可以被使用到一个需要scalar的环境中去,Perl会尽力把@foo转换成一个scalar,一般来说,这个scalar就是@foo的长度。 Python中,直接使用变量名,就能获得整个list(或者tuple)。