Ответ 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 превосходит большинство вещей, которые мне нужно выполнить.