todayx.org
todayx.org
posts - 39,comments - 60,trackbacks - 0

Java VS Python 生产效率 -概述
下面是3个主要的特性能够让Python程序员效率高于java程序员

Java

Python

静态类型
在java里面所有的变量名称(和他们的类型)必须被明确的定义,如果尝试去将某个对象赋予错误的类型,只会引起类型异常。这就为什么说java是静态语言。

java 集合对象(如:Vector和ArrayList)里面可以保存了通用类型对象,但是无法保存基本类型,如int等。要保存int到Vector,你必须 先要转换int到Integer(注:这里指的1.5版以前的java)。同样的,当你要从集合中取出一个对象时,已经不记得对象的类型,必须显示转换为 期望的类型。
动态类型
在Python里面,你不需要定义任何东西(注:这里主要指的还是变量)。赋值语句将对象赋给某个变量名,并且对象可以是任意类型。如果变量已经被赋予某个类型对象,之后还可以被赋予另外一个不同类型的对象。这就是为什么Python被称为动态类型。
Python的集合对象(如:lists和dictionaries)里面可以保存任意类型的对象,包括数字和lists。当你从集合中取出一个对象是,他仍然记得这个对象的类型,所以无需进行类型转换。
静态类型vs动态类型的更多信息,看这里
冗长
”大量的语句;使用过程中很多语句并不是必须的”
简洁(简练)
只需要几个简单的语句就可以表达很多。意味着清晰而简洁,无需多余的语句就能完成目标。
不紧凑
紧凑
在新的黑客字典里,Eric S. Raymond给予了“紧凑”这样的定义:
Compact adj. 在设计中,描述有价值的特性并能够被人们立马理解。

 

 

 

 

 

 

 

 

例子

 

 

“hello world!”

Java

Python

public class HelloWorld {     public static void main (String[] args)     {         System.out.println("Hello, world!");     } }
print "Hello, world!"

print("Hello, world!") # Python version 3

 

 

 

 

 

 

 

例子

下面的例子里,我们初始化integer为0,再把他转为string,最后检查他是否为空。注意,数据的声明在java里是必须的,但Python里不是。还会注意到即时只是在简单的比较两个字符串的时候,java代码还是会显得冗长。

Java

Python

int    myCounter = 0; String myString = String.valueOf(myCounter); if (myString.equals("0")) ...
myCounter = 0 myString = str(myCounter) if myString == "0": ...
// print the integers from 1 to 9 for (int i = 1; i < 10; i++) {    System.out.println(i); }
#print the integers from 1 to 9 for i in range(1,10):     print i

 

 

 

 

例子

你的应用有15个class。(准确的说是15个顶层的public class)。

Java

Python

每个顶层的public class都必须定义一个单独的文件。如果你的应用有15个class,那就有15个文件。 多个class可以被定义到单个文件中。如果你应用有15个class,只要你愿意甚至可以将整个应用都存放到一个文件中,但是更明智的情况是将这些class分散到4-6个文件中。

 

 

 

 

 

例子

在你的应用中,A方法调B方法,B调C,C调D,D调E,E调F。当你发现F必须抛出SpecialException异常,它必须被A捕获时。

Java

Python

你必须在F中throw SpecialException,然后在A中进行catch。
同时
你必须在B、C、D、E和F,每个方法上都申明”throws SpecialException”。
你必须在F中rasie SpecialException,并在A中进行catch。由于异常会自动往上升,所以你不需要做任何其他事情。

这个原因还是因为java事实上是封闭的面向对象程序语言,使用了checked exception --- 在异常出现的每个方法中,他们必须被抛出或捕获,否则连编译都无法通过。

 

 

 

 

 

 

例子

你的应用里面有个Employee class,当一个Employee的实例被创建,构造函数可能传入1个、2个或者3个参数。

如果是在java中,这意味着你必须写3个不同参数的构造函数。如果你用Python,你只用写一个带可选参数和默认值的构造函数。

Java

Python

public class Employee {     private String myEmployeeName;     private int    myTaxDeductions = 1;     private String myMaritalStatus = "single";      //--------- constructor #1 -------------     public Employee(String EmployeName)     {         this(employeeName, 1);     }      //--------- constructor #2 -------------     public Employee(String EmployeName, int taxDeductions)     {        this(employeeName, taxDeductions, "single");     }      //--------- constructor #3 -------------     public Employee(String EmployeName,            int taxDeductions,            String maritalStatus)     {        this.employeeName    = employeeName;        this.taxDeductions   = taxDeductions;        this.maritalStatus   = maritalStatus;     } ...
class Employee():      def __init__(self,         employeeName         , taxDeductions=1         , maritalStatus="single"         ):          self.employeeName    = employeeName         self.taxDeductions   = taxDeductions         self.maritalStatus   = maritalStatus ...

在Python中,一个类只包含一个构造函数。
构造方法都是用的特殊的名字:__init__

 

 

 

 

 

 

 

 

 

例子

关于紧凑(注:略去”名人名言“若干)

Java

Python

import java.io.*; ...  BufferedReader myFile =     new BufferedReader(         new FileReader(argFilename));
# open an input file myFile = open(argFilename)

 

 

 

 

 

 

 

 

 

例子

string处理能力的比较

功能

Java

Python

去掉头尾空格 s.trim() s.strip()
去掉头部空格 未提供 s.lstrip()
去掉尾部空格 未提供 s.rstrip()

 

 

 

 

 

 

 

 

例子

将int加到Vector

Java

Python

public Vector<Integer> aList = new Vector<Integer>; public int    aNumber      = 5; public int    anotherNumber;  aList.addElement(aNumber); anotherNumber = aList.getElement(0);
aList = [] aNumber = 5  aList.append(aNumber) anotherNumber = aList[0]

 

 

 

 

 

 

 

 

 

例子

Java

Python

if ( a > b ) {     a = b;     b = c; }
if  a > b :     a = b     b = c

 

 

转自:
http://xflykkk.iteye.com/blog/1337444


历史上的今天
回顾历史的今天,历史就像生活的一面镜子;可以了解历史的这一天发生的事件;借古可以鉴今;历史是不能忘记的.要记住历史的每一天
http://www.todayx.org/
posted on 2012-01-08 16:25 todayx.org 阅读(3324) 评论(7)  编辑  收藏

FeedBack:
# re: Python与Java语法比较[未登录]
2012-01-08 22:14 | stanleyxu2005
你的比较很不科学。一个是强类型语言,一个是弱类型的脚本语言。用途不一样,比较一点意义都没有。  回复  更多评论
  
# re: Python与Java语法比较
2012-01-08 22:33 | jackerxff
几年前别人写的Java代码现在或许还能读懂 3P1R (PHP Python Perl Ruby) 恐怕只能读懂 上个月自己写的  回复  更多评论
  
# re: Python与Java语法比较
2012-01-08 23:59 | allenny
谁说public class只能定义单独的文件?你也许要说“顶层”,但是是不是顶层又有什么所谓呢  回复  更多评论
  
# re: Python与Java语法比较
2012-01-09 00:16 | todayx.org
@jackerxff

对 动态语言不好读   回复  更多评论
  
# re: Python与Java语法比较
2012-01-09 09:15 | HiMagic!
不完整的语言比较,对于程序员来说,视角要更开阔些  回复  更多评论
  
# re: Python与Java语法比较[未登录]
2012-01-09 14:21 | greatghoul
我也觉得这种比较没有太大的意义,与其在这些方面比较,不如比较在应用上面的差异 。  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: