Java - > Python?

jod*_*ell 29 python java

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

Eli*_*ght 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或null或者您想要防范的任何内容等.

  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")

无论如何,我可以继续使用更多示例,但Python总体上是一种更灵活和更具表现力的语言.它也是动态类型的,我真的很喜欢,但它有一些缺点.

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

  • 不要忘记生成器/协同程序,这使得编写迭代器(和模拟)变得更加容易. (6认同)

dF.*_*dF. 16

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


Dav*_*ebb 5

Python中的一个关键区别是重要的空白.这让很多人离开了我很长一段时间 - 但是一旦你开始它似乎自然而且比;任何地方都更有意义.

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

除此之外,Python Wiki上的这个页面是一个很好看的地方,有很多链接到有趣的文章.

  • “没有检查异常”绝对不是一个改进。我想知道什么地方可能出问题,而不必猜测一些情况并希望仅此而已。 (2认同)
  • 好吧,C#来自Java之后,他们不加试验.采访了A. Heisenberg(?)及其背后的理由.但我认为他基本上说检查过的异常在纸面上看起来很好,并且在实践中很痛苦 (2认同)