Помимо динамической природы Python (и синтаксиса), каковы некоторые из основных особенностей языка Python, которые Java не имеет, и наоборот?
Java → Python?
Ответ 1
-
Сопоставление списков. Я часто нахожу себя фильтрацией/отображением списков, и возможность сказать
[line.replace("spam","eggs") for line in open("somefile.txt") if line.startswith("nee")]
очень приятная. -
Функции - это объекты первого класса. Они могут передаваться в качестве параметров другим функциям, определенным внутри другой функции, и иметь лексический охват. Это позволяет легко говорить такие вещи, как
people.sort(key=lambda p: p.age)
и, таким образом, сортировать группу людей по своему возрасту без необходимости определять собственный класс компаратора или что-то подобное. -
Все это объект. Java имеет базовые типы, которые не являются объектами, поэтому многие классы в стандартной библиотеке определяют 9 различных версий функций (для boolean, byte, char, double, float, int, long, Object, short).
Array.sort
- хороший пример. Автобоксинг помогает, хотя это делает вещи неудобными, когда что-то оказывается нулевым. -
Свойства. Python позволяет создавать классы с полями только для чтения, лениво генерируемыми полями, а также поля, которые проверяются при назначении, чтобы убедиться, что они никогда не равны 0 или null или что вы хотите защитить от и т.д. '
-
По умолчанию и аргументы ключевого слова. В Java, если вы хотите, чтобы конструктор мог принимать до 5 необязательных аргументов, вы должны определить 6 разных версий этого конструктора. И нет никакого способа сказать
Student(name="Eli", age=25)
-
Функции могут возвращать только 1 вещь. В Python у вас есть назначение кортежа, поэтому вы можете сказать
spam, eggs = nee()
, но в Java вам нужно либо прибегнуть к изменяемым параметрам, либо иметь собственный класс с двумя полями, а затем вывести две дополнительные строки кода для извлечения этих полей. -
Встроенный синтаксис для списков и словарей.
-
Перегрузка оператора.
-
Как правило, лучше разработаны библиотеки. Например, для анализа XML-документа на Java, вы говорите, что
Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse("test.xml");
и в Python вы говоритеdoc = parse("test.xml")
В любом случае, я мог бы продолжать и продолжать с другими примерами, но Python - это всего лишь более гибкий и выразительный язык. Это также динамически типизировано, что мне действительно нравится, но которое имеет некоторые недостатки.
Java имеет гораздо лучшую производительность, чем Python, и имеет лучшую поддержку инструмента. Иногда эти вещи имеют большое значение, а Java - лучший язык, чем Python для задачи; Я продолжаю использовать Java для некоторых новых проектов, несмотря на то, что мне нравится Python намного больше. Но, как я думаю, Python превосходит большинство вещей, которые мне нужно выполнить.
Ответ 2
Я думаю, что эта пара статей Филиппа Дж. Эби отлично справляется с обсуждением различий между двумя языками (в основном о философии/менталитете, а не о конкретных языковых возможностях).
Ответ 3
Одним из ключевых различий в Python является значимый пробел. Это откладывает много людей - я тоже надолго - но как только вы начинаете, это кажется естественным и имеет гораздо больше смысла, чем ;
везде.
В личной перспективе Python обладает следующими преимуществами по сравнению с Java:
- Нет Проверенные исключения
- Дополнительные аргументы
- Гораздо меньше шаблонов и менее подробных
Кроме того, эта страница в Python Wiki - это хорошее место для поиска с большим количеством ссылок на интересные статьи.
Ответ 4
С Jython вы можете иметь оба. Это только на Python 2.2, но все же очень полезно, если вам нужен встроенный интерпретатор, имеющий доступ к среде выполнения Java.
Ответ 5
Кроме того, что сказал Эли Кортэйт:
- Я считаю, что итераторы в Python более сжатые. Вы можете использовать для меня что-то, и оно работает почти во всем. Да, Java улучшился с 1,5, но, к примеру, вы можете перебирать строку в python с этой же конструкцией.
- Introspection: в python вы можете получить информацию о времени выполнения объекта или модуля о его символах, методах или даже своих докстронгах. Вы также можете создавать их динамически. В Java есть часть этого, но обычно в Java требуется половина страницы кода, чтобы получить экземпляр класса, тогда как в Python это около 3 строк. И насколько я знаю, докстопы не доступны в Java