Java -> Python?

前端 未结 5 823
深忆病人
深忆病人 2021-01-30 02:51

Besides the dynamic nature of Python (and the syntax), what are some of the major features of the Python language that Java doesn\'t have, and vice versa?

相关标签:
5条回答
  • 2021-01-30 03:01
    1. List comprehensions. I often find myself filtering/mapping lists, and being able to say [line.replace("spam","eggs") for line in open("somefile.txt") if line.startswith("nee")] is really nice.

    2. Functions are first class objects. They can be passed as parameters to other functions, defined inside other function, and have lexical scope. This makes it really easy to say things like people.sort(key=lambda p: p.age) and thus sort a bunch of people on their age without having to define a custom comparator class or something equally verbose.

    3. Everything is an object. Java has basic types which aren't objects, which is why many classes in the standard library define 9 different versions of functions (for boolean, byte, char, double, float, int, long, Object, short). Array.sort is a good example. Autoboxing helps, although it makes things awkward when something turns out to be null.

    4. Properties. Python lets you create classes with read-only fields, lazily-generated fields, as well as fields which are checked upon assignment to make sure they're never 0 or null or whatever you want to guard against, etc.'

    5. Default and keyword arguments. In Java if you want a constructor that can take up to 5 optional arguments, you must define 6 different versions of that constructor. And there's no way at all to say Student(name="Eli", age=25)

    6. Functions can only return 1 thing. In Python you have tuple assignment, so you can say spam, eggs = nee() but in Java you'd need to either resort to mutable out parameters or have a custom class with 2 fields and then have two additional lines of code to extract those fields.

    7. Built-in syntax for lists and dictionaries.

    8. Operator Overloading.

    9. Generally better designed libraries. For example, to parse an XML document in Java, you say
      Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse("test.xml");
      and in Python you say
      doc = parse("test.xml")

    Anyway, I could go on and on with further examples, but Python is just overall a much more flexible and expressive language. It's also dynamically typed, which I really like, but which comes with some disadvantages.

    Java has much better performance than Python and has way better tool support. Sometimes those things matter a lot and Java is the better language than Python for a task; I continue to use Java for some new projects despite liking Python a lot more. But as a language I think Python is superior for most things I find myself needing to accomplish.

    0 讨论(0)
  • 2021-01-30 03:04

    I think this pair of articles by Philip J. Eby does a great job discussing the differences between the two languages (mostly about philosophy/mentality rather than specific language features).

    • Python is Not Java
    • Java is Not Python, either
    0 讨论(0)
  • 2021-01-30 03:06

    With Jython you can have both. It's only at Python 2.2, but still very useful if you need an embedded interpreter that has access to the Java runtime.

    0 讨论(0)
  • 2021-01-30 03:14

    One key difference in Python is significant whitespace. This puts a lot of people off - me too for a long time - but once you get going it seems natural and makes much more sense than ;s everywhere.

    From a personal perspective, Python has the following benefits over Java:

    • No Checked Exceptions
    • Optional Arguments
    • Much less boilerplate and less verbose generally

    Other than those, this page on the Python Wiki is a good place to look with lots of links to interesting articles.

    0 讨论(0)
  • 2021-01-30 03:15

    Apart from what Eli Courtwright said:

    • I find iterators in Python more concise. You can use for i in something, and it works with pretty much everything. Yeah, Java has gotten better since 1.5, but for example you can iterate through a string in python with this same construct.
    • Introspection: In python you can get at runtime information about an object or a module about its symbols, methods, or even its docstrings. You can also instantiate them dynamically. Java has some of this, but usually in Java it takes half a page of code to get an instance of a class, whereas in Python it is about 3 lines. And as far as I know the docstrings thing is not available in Java
    0 讨论(0)
提交回复
热议问题