Java -> Python?

标签 java python

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

最佳答案

  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 更好的语言;尽管我更喜欢 Python,但我继续在一些新项目中使用 Java。但作为一门语言,我认为 Python 在我发现自己需要完成的大多数事情上都更胜一筹。

关于Java -> Python?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49824/

相关文章:

java - 什么时候使用 getAutowireCapableBeanFactory().autowireBean(someBean)?

python - 无法在循环中设置正确的索引

python - 使用 bool 索引访问 Python 列表中的元素

java - FileInputStream 抛出 NullPointerException

javascript - 在 java/html 成绩计算器中显示计算答案的问题

java - 哈希集迭代

python - 通过 Python 中的 pandas 将每日股票数据转换为每周数据

java - 如何在 Java 中执行与 StringBuilder append 相反的操作?

python - 将标签列添加到数据框

python - Ruby 相当于 Python str[3 :]