Java - >蟒蛇?

时间:2008-09-08 14:36:24

标签: java python

除了Python(和语法)的动态特性之外,Java没有的Python语言的一些主要特性是什么,反之亦然?

5 个答案:

答案 0 :(得分:47)

  1. 列表理解。我经常发现自己过滤/映射列表,能够说[line.replace("spam","eggs") for line in open("somefile.txt") if line.startswith("nee")]非常好。

  2. 函数是第一类对象。它们可以作为参数传递给其他函数,在其他函数中定义,并具有词法范围。这样就可以很容易地说出像people.sort(key=lambda p: p.age)这样的东西,从而根据他们的年龄对一群人进行排序,而无需定义自定义比较器类或同样详细的东西。

  3. 一切都是对象。 Java具有非对象的基本类型,这就是为什么标准库中的许多类定义了9个不同版本的函数(对于boolean,byte,char,double,float,int,long,Object,short)。 Array.sort就是一个很好的例子。自动装箱有所帮助,虽然当事情变成无效时会让事情变得尴尬。

  4. 属性。 Python允许您创建具有只读字段,延迟生成字段的类,以及在分配时检查以确保它们永远不会为0或无效或者您想要防范的任何字段等等。

  5. 默认和关键字参数。在Java中,如果您想要一个最多可以包含5个可选参数的构造函数,则必须定义该构造函数的6个不同版本。并且完全没有办法说Student(name="Eli", age=25)

  6. 功能只能返回1件事。在Python中你有元组赋值,所以你可以说spam, eggs = nee()但是在Java中你需要求助于可变输出参数或者有一个包含2个字段的自定义类,然后有两行额外的代码来提取这些字段

  7. 列表和词典的内置语法。

  8. 运算符重载。

  9. 通常设计更好的库。例如,要用Java解析XML文档,请说
    Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse("test.xml");
    在Python中,你说
    doc = parse("test.xml")

  10. 无论如何,我可以继续使用更多的例子,但Python总体来说是一种更加灵活和富有表现力的语言。它也是动态类型的,我非常喜欢,但它有一些缺点。

    Java具有比Python更好的性能,并且具有更好的工具支持。有时这些事情很重要,而Java是比Python更好的语言来执行任务;我继续使用Java进行一些新项目,尽管他们更喜欢Python。但作为一种语言,我认为Python对于我发现自己需要完成的大多数事情都是优越的。

答案 1 :(得分:16)

我认为Philip J. Eby撰写的这篇文章在讨论两种语言之间的差异方面做得很好(主要是关于哲学/心理而不是特定的语言特征)。

答案 2 :(得分:5)

Python的一个关键区别是significant whitespace。这让很多人离开了我很长一段时间 - 但是一旦你开始它似乎很自然,比任何地方的;更有意义。

从个人角度来看,Python比Java具有以下优势:

除此之外,this page on the Python Wiki是一个很好看的地方,有很多链接到有趣的文章。

答案 3 :(得分:3)

使用Jython,你可以拥有两者。它仅适用于Python 2.2,但如果您需要一个可以访问Java运行时的嵌入式解释器,它仍然非常有用。

答案 4 :(得分:2)

除了Eli Courtwright所说的话:

  • 我发现Python中的迭代器更简洁。您可以在中使用 for i,它几乎适用于所有内容。是的,自1.5以来Java已经变得更好,但是例如你可以使用相同的构造迭代python中的字符串。
  • 内省:在python中,您可以获得有关其符号,方法甚至文档字符串的对象或模块的运行时信息。您也可以动态实例化它们。 Java有一些,但通常在Java中,需要半页代码才能获得类的实例,而在Python中则需要大约3行。据我所知,文档字符串在Java中不可用