设为首页 收藏本站
查看: 762|回复: 0

[经验分享] Python vs Java语法比较

[复制链接]

尚未签到

发表于 2017-4-24 08:53:36 | 显示全部楼层 |阅读模式
  这篇是从国外一篇blog翻译过来,虽然文章里面的个人看法有些偏激,但是确实有很多Python和Java的语法比较的内容,很适合像我这样搞java转Python的,权当是Javaer到Pythoner的快速入门吧:)
  
  
  
  -----------------------------------------------------------------------------------------------------------------------
  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://pythonconquerstheuniverse.wordpress.com/2009/10/03/python-java-a-side-by-side-comparison/

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-368411-1-1.html 上篇帖子: 加速Python运行的工具应用 下篇帖子: [python]python环境变量以及模块搜索路径
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表