Java -> Python?

2022-09-01 11:24:41

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


答案 1
  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个不同版本的函数(布尔值,字节,字符,双精度,浮点数,int,long,Object,short)。 就是一个很好的例子。自动装箱会有所帮助,尽管当某些内容被证明是空时,它会使事情变得尴尬。Array.sort

  4. 性能。Python允许你创建具有只读字段,懒惰生成的字段以及在赋值时检查的字段的类,以确保它们永远不会是0或null或任何你想要防止的字段,等等。

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

  6. 函数只能返回 1 个事物。在Python中,你有元组赋值,所以你可以说,但在Java中,你需要诉诸可变的out参数,或者有一个具有2个字段的自定义类,然后有两行额外的代码来提取这些字段。spam, eggs = nee()

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

  8. 运算符重载。

  9. 通常设计更好的库。例如,要在Java中解析XML文档,您说

    ,在Python中,您说Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse("test.xml");
    doc = parse("test.xml")

无论如何,我可以继续举进一步的例子,但Python总体上是一种更加灵活和富有表现力的语言。它也是动态类型的,我真的很喜欢,但它有一些缺点。

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


答案 2

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