Python与Perl不能说的秘密(二)

2014-11-24 08:57:10 · 作者: · 浏览: 4
是数字,就是字符串。但是,不可能既是数字,又是字符串。Python会判断变量到底是数字,还是字符串,以此来选择怎么解释函数;如果它找不到一个合适的解释,那么Python会抛出异常。一般来说,这种策略能够取悦一部分程序员,同时让另外一部分人感觉很不爽。


关于 复合类型


Perl有两种复合类型:array和hash。Python有三种复合类型:tuple,


list, dict。


Python中的tuple+list,完全对应于Perl中的array;因此不存在谁提供的


类型更丰富这样的问题。


关于 创建


Perl中创建array可以通过()。但是()到底是否会创建一个array,这取决于所处的上下文;换句话说,只有当上下文要求一个array时,()才会产生一个array。事实上,()可能创建一个scalar,也可能创建一个hash,这完全取决于上下文。


关于存取单个元素


Perl中我们可以用$foo[$bar]来表示foo这个array中的第$bar个元素。特别诡异的是,这个foo和$foo中的foo是完全不相干的,这回应了前面提到的Perl原则,一个符号到底什么意思,取决于上下文。并且,在$foo[$bar]这样一个上下文中,$bar会被Perl搞成整数,无论它本来是什么。


Perl中,用一个越界的idx访问array是完全正常的,Perl会悄悄的扩展array。Python中,tuple或者是list,两者都通过lst[idx]这样的形式存取其中的元素。


Python中,用一个越界的idx访问array会触发一个异常。


Python中,提供了强大的slice功能。


关于做为整体的list


Perl中,用@开头的名字表示整个array,据说是因为@是array的字头。但是,又根据Perl的原则,@foo这样的array也可以被使用到一个需要scalar的环境中去,Perl会尽力把@foo转换成一个scalar,一般来说,这个scalar就是@foo的长度。


Python中,直接使用变量名,就能获得整个list(或者tuple)。


关于历史:


Perl 的前身语言:C, awk, sed, sh, 以系统管理为目标, 强调使用性而不是美观(Perl最早的man page里提到); Python来源于ABC, 一种 同BASIC目标类似的语言,属于学习曲线比较平缓的那种。


Perl 直接创始自工作任务, Python是作者工作经验的总结.


Perl 早期属于UNIX文化;Python 建立在Amoeba这种实验性系统上.


Wall 是个有激情的基督徒, 所受的教育是语言学专业. Guido 是CS专业毕业, 没有听说有异常的宗教信仰.


三、总结


这里我列举的内容都是python和perl的皮毛,只是让大家知道这两种语言涞源,历史和主要用处,并不是教大家这两种语言。同时强烈鄙视:谁谁谁好,谁谁垃圾的观点!


没有最好的语言,只有最好的coder..............