请选择 进入手机版 | 继续访问电脑版
  • 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Python 与 Perl的优缺点

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

一: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)。

二:Python初探

(1)下面让我们一步一步的走进Python的世界

(2)技巧简介

1 ---python 脚本运行,下面用的是在cmd下运行的


2--- python控制台上的输入输出

3 –  万恶的“:”代替了{ } 太牛逼了,语句的组织依赖于缩进而不是begin/end块;所以缩进一定要控制好;

4-- 不需要变量或参数声明,拿来就用

5-- Python可以写出很紧凑和可读性很强的程序。用Python写的程序通常比同样的C或C++程序要短得多

6-- 主提示符来执行,主提示符通常标识为三个大于号(“>>> ”);继续的部分被称为从属提示符,由三个点标识(“...)。连续两个回车就可以结束从属提示符,变为通常标示符>>>

7-- Python脚本可以像Shell脚本那样直接执行,只要在脚本文件开头写一行命令,指定文件和模式:

 #! /usr/bin/env python

 (将用户路径通知解释器) “#!”必须是文件的前两个字符,在某些平台上,第一行必须以Unix风格的行结束符(“\n”)结束,不能用Mac(“\r”)或Windows(“\r\n”)的结束符。注意,“#Python中是行注释的起始符。

8-- 

Python的源文件可以通过编码使用 ASCII 以外的字符集。 最好的做法是在 #! 行后面用一个特殊的注释行来定 义字符集。

# -*- coding: iso-8859-1 -*-

根据这个声明,Python会将文件中的字符尽可能的从指定的编码转为Unicode,在本例中,这个字符集是iso-8859-1。在   Python库参考手册中可以找到可用的编码列表(根据我的实验,中文似乎只能用cp-936utf-8,不直接支持GBGBKGB-18030ISO-10646--译者注)。

9-- pass语句什么也不做。 if  exp: elif exp: else:

它用于那些语法上必须要有什么语句,但程序上什么也不要做的场合,例如: 

[python] view plain copy
  1. >>> while True:  
  2. ...        pass # Busy-wait for keyboardinterrupt  
  3. ...  
  4.  if n > 0:  
  5.     sum = 1;  
  6.  elif n == 0:  
  7.     sum = 0  
  8.  else:  
  9.     sum = -1;  

10 -- 定义函数
关键字def 引入了一个函数定义。在其后必须跟有函数名和包括形式参数的圆括号。函数体语句从下一行开始,必须是缩进的。函数体的第一行可以是一个字符串值,这个字符串是该函数的 文档字符串,也可称作docstring。
 有些文档字符串工具可以在线处理或打印文档,或让用户交互的浏览代码;在你的代码中加入文档字符串是一 个好的作法,应该养成习惯。

11--通过lambda关键字,可以创 建很小的匿名函数

通过lambda关键字,可以创 建很小的匿名函数。这里有一个函数返回它的两个参数的和:“lambdaa, b: a+bLambda形式可以用于任何 需要的函数对象。出于语法限制,它们只能有一个单独的表达式。语义上讲,它们只是普通函数定义中的一个 语法技巧。

12 -- del语句

有一个方法可从链表中删除指定索引的元素:del语句。这个方法也可以从链表中删除切片(之前我们是把一个空链表赋给切片)。例如:

[python] view plain copy
  1. >>> a = [-1166.63333331234.5]  
  2. >>> del a[0]  
  3. >>> a  
  4. [166.63333331234.5]  
  5. >>> del a[2:4]  
  6. >>> a  
  7. [166.61234.5]  
  8. del 也可以用于删除整个变量:  
  9. >>>del a  

三:实战篇

[python] view plain copy
  1. #coding=utf-8  
  2. #!/usr/bin/python  
  3.   
  4. import xml.sax  
  5. # 继承语法 class 派生类名(基类名)://... 基类名写作括号里,基本类是在类定义的时候,在元组之中指明的。       
  6. class MovieHandler( xml.sax.ContentHandler ):  
  7.    def __init__(self):  
  8.       self.CurrentData = ""  
  9.       self.type = ""  
  10.       self.format = ""  
  11.       self.year = ""  
  12.       self.rating = ""  
  13.       self.stars = ""  
  14.       self.description = ""  
  15.   
  16.    # 元素开始事件处理  
  17.    def startElement(self, tag, attributes):  
  18.       self.CurrentData = tag  
  19.       if tag == "movie":  
  20.          print "*****Movie*****"  
  21.          title = attributes["title"]  
  22.          print "Title:", title  
  23.   
  24.    # 元素结束事件处理  
  25.    def endElement(self, tag):  
  26.       if self.CurrentData == "type":  
  27.          print "Type:"self.type  
  28.       elif self.CurrentData == "format":  
  29.          print "Format:"self.format  
  30.       elif self.CurrentData == "year":  
  31.          print "Year:"self.year  
  32.       elif self.CurrentData == "rating":  
  33.          print "Rating:"self.rating  
  34.       elif self.CurrentData == "stars":  
  35.          print "Stars:"self.stars  
  36.       elif self.CurrentData == "description":  
  37.          print "Description:"self.description  
  38.       self.CurrentData = ""  
  39.   
  40.    # 内容事件处理  
  41.    def characters(self, content):  
  42.       if self.CurrentData == "type":  
  43.          self.type = content  
  44.       elif self.CurrentData == "format":  
  45.          self.format = content  
  46.       elif self.CurrentData == "year":  
  47.          self.year = content  
  48.       elif self.CurrentData == "rating":  
  49.          self.rating = content  
  50.       elif self.CurrentData == "stars":  
  51.          self.stars = content  
  52.       elif self.CurrentData == "description":  
  53.          self.description = content  
  54.     
  55. if ( __name__ == "__main__"):  
  56.      
  57.    # 创建一个 XMLReader  
  58.    parser = xml.sax.make_parser()  
  59.    # turn off namepsaces  
  60.    parser.setFeature(xml.sax.handler.feature_namespaces, 0)  
  61.   
  62.    # 重写 ContextHandler  
  63.    Handler = MovieHandler()  
  64.    parser.setContentHandler( Handler )  
  65.      
  66.    parser.parse("movies.xml")  
  67.      
  68.      
  69. def foo(bar=[]):        # bar是可选参数,如果没有指明的话,默认值是[]  
  70.     bar.append("MKY");    # 但是这行可是有问题的,走着瞧…  
  71.     return bar;  
  72. print foo()  
  73. print foo()  
  74.   
  75. odd = lambda x : bool(x % 2)  
  76. nums = [n for n in range(10)]  
  77. nums[:] = [n for n in nums if not odd(n)]  # 啊,这多优美  

  78. 鲜花

    握手

    雷人

    路过

    鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap