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