Java -> Python? - PullRequest
       35

Java -> Python?

29 голосов
/ 08 сентября 2008

Помимо динамической природы Python (и синтаксиса), каковы некоторые из основных особенностей языка Python, которых нет в Java, и наоборот?

Ответы [ 5 ]

47 голосов
/ 08 сентября 2008
  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 различных версий функций (для логического, байтового, char, double, float, int, long, Object, short). Array.sort хороший пример. Автобокс помогает, хотя и делает неловкое, когда что-то оказывается нулевым.

  4. Свойства. Python позволяет создавать классы с полями, предназначенными только для чтения, сгенерированными лениво полями, а также полями, которые проверяются при назначении, чтобы убедиться, что они никогда не равны нулю или не равны нулю или тому, против чего вы хотите защитить, и т. 1019 *

  5. Параметры по умолчанию и ключевые слова. В Java, если вам нужен конструктор, который может принимать до 5 необязательных аргументов, вы должны определить 6 разных версий этого конструктора. И нет никакого способа сказать Student(name="Eli", age=25)

  6. Функции могут возвращать только 1 вещь. В Python у вас есть присваивание кортежей, так что вы можете сказать spam, eggs = nee(), но в Java вам нужно либо прибегнуть к изменяемым параметрам, либо иметь собственный класс с 2 полями, а затем иметь две дополнительные строки кода для извлечения этих полей.

  7. Встроенный синтаксис для списков и словарей.

  8. Перегрузка оператора.

  9. Обычно лучше разработанные библиотеки. Например, чтобы проанализировать XML-документ в Java, вы говорите
    Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse("test.xml");
    и в Python вы говорите
    doc = parse("test.xml")

В любом случае, я мог бы продолжать и продолжать с другими примерами, но в целом Python является гораздо более гибким и выразительным языком. Он также динамически набирается, что мне действительно нравится, но имеет некоторые недостатки.

Java имеет гораздо лучшую производительность, чем Python, и имеет гораздо лучшую поддержку инструментов. Иногда эти вещи имеют большое значение, и Java для задачи лучше, чем Python; Я продолжаю использовать Java для некоторых новых проектов, несмотря на то, что мне больше нравится Python. Но, как язык, я думаю, что Python превосходит большинство вещей, в которых я нуждаюсь.

16 голосов
/ 08 сентября 2008

Я думаю, что эта пара статей Филипа Дж. Эби отлично справляется с обсуждением различий между двумя языками (в основном о философии / менталитете, а не о конкретных языковых особенностях).

5 голосов
/ 08 сентября 2008

Одно ключевое отличие в Python - значительный пробел . Это отталкивает многих людей - меня тоже на долгое время - но как только вы начинаете, это кажется естественным и имеет гораздо больший смысл, чем ; s везде.

С личной точки зрения Python имеет следующие преимущества перед Java:

Кроме них, эта страница в Python Wiki - это хорошее место, где можно найти множество ссылок на интересные статьи.

3 голосов
/ 08 сентября 2008

С Jython вы можете иметь оба. Это только в Python 2.2, но все еще очень полезно, если вам нужен встроенный интерпретатор, который имеет доступ к среде выполнения Java.

2 голосов
/ 09 сентября 2008

Кроме того, что сказал Эли Кортрайт:

  • Я считаю итераторы в Python более лаконичными. Вы можете использовать для меня в чем-то , и это работает практически со всем. Да, Java стала лучше с 1.5, но, например, вы можете перебирать строку в python с помощью этой же конструкции.
  • Самоанализ: в python вы можете получить во время выполнения информацию об объекте или модуле о его символах, методах или даже его строках документов. Вы также можете создавать их динамически. В Java есть кое-что из этого, но обычно в Java для получения экземпляра класса требуется половина страницы кода, тогда как в Python это около 3 строк. И, насколько я знаю, в Java
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...