除了Python(和语法)的动态特性之外,Java没有的Python语言的一些主要特性是什么,反之亦然?
答案 0 :(得分:47)
列表理解。我经常发现自己过滤/映射列表,能够说[line.replace("spam","eggs") for line in open("somefile.txt") if line.startswith("nee")]
非常好。
函数是第一类对象。它们可以作为参数传递给其他函数,在其他函数中定义,并具有词法范围。这样就可以很容易地说出像people.sort(key=lambda p: p.age)
这样的东西,从而根据他们的年龄对一群人进行排序,而无需定义自定义比较器类或同样详细的东西。
一切都是对象。 Java具有非对象的基本类型,这就是为什么标准库中的许多类定义了9个不同版本的函数(对于boolean,byte,char,double,float,int,long,Object,short)。 Array.sort
就是一个很好的例子。自动装箱有所帮助,虽然当事情变成无效时会让事情变得尴尬。
属性。 Python允许您创建具有只读字段,延迟生成字段的类,以及在分配时检查以确保它们永远不会为0或无效或者您想要防范的任何字段等等。
默认和关键字参数。在Java中,如果您想要一个最多可以包含5个可选参数的构造函数,则必须定义该构造函数的6个不同版本。并且完全没有办法说Student(name="Eli", age=25)
功能只能返回1件事。在Python中你有元组赋值,所以你可以说spam, eggs = nee()
但是在Java中你需要求助于可变输出参数或者有一个包含2个字段的自定义类,然后有两行额外的代码来提取这些字段
列表和词典的内置语法。
运算符重载。
通常设计更好的库。例如,要用Java解析XML文档,请说
Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse("test.xml");
在Python中,你说
doc = parse("test.xml")
无论如何,我可以继续使用更多的例子,但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所说的话: