Python динамический. Создание класса является исполняемым оператором , как и импорт модуля; это можно сделать условным. Класс может быть изменен после создания; это позволяет легко метапрограммировать и АОП.
Там нет интерфейсов; правила печати утки. Если они вам крайне необходимы, существуют «абстрактные базовые классы (ABC)», но обычно вы не пропускаете интерфейсы, поскольку в любом случае нет статической проверки типов.
Хотя все является объектом, функции предшествуют объектам. Наличие только функций (и никаких классов) в модуле прекрасно.
Все первоклассное юридическое лицо. Передача функций в качестве параметров, их возврат и присвоение переменным является нормой. То же самое для занятий. Методы - это просто функции; вы можете обрабатывать метод экземпляра, как если бы он был обычной функцией, передавать его и т. д.
Используйте встроенные подсказки, наборы, списки и кортежи. Списки и сообщения изменчивы, а кортежи - нет. Все они очень эффективны и синтаксически лаконичны. Привыкайте возвращать несколько значений из функции с помощью кортежа (вам даже не нужны скобки). Привыкайте заменять сложные иерархии очень простых объектов хитроумными конструкциями из простых списков, кортежей и словосочетаний («хеш-таблиц»), это упрощает жизнь.
Python имеет достаточную поддержку FP; изучите списки, а затем итераторы и генераторы. Это очень помогает.
Любые операторы могут быть перегружены путем определения правильных методов, поэтому сложение или сравнение могут вернуть все, что вы захотите. Помните об этом, работая с такими вещами, как SQLAlchemy.
Там нет нуля, только None, полноценный объект. Вы можете напечатать None просто отлично и т. Д. Передача None, когда ожидается другой экземпляр, обычно приводит к ошибке AttributeError, а не NPE, иногда дальше по конвейеру выполнения.
Из-за полностью динамической природы Python у вас практически нет статических проверок . Вы можете ссылаться на имя, которое никогда не существует в вашей программе (например, опечатка) или определено только в определенном пути выполнения, и ничто не будет напоминать вам об этом, пока выполнение не достигнет этой ссылки и не произойдет ошибка NameError. Будьте осторожны с областью действия ваших переменных и пишите больше модульных тестов.
Из-за полностью динамической природы Python объекты почти всегда податливы. Обычно вы можете добавлять поля и методы даже к экземпляру и, таким образом, непреднамеренно удалять или перезаписывать его состояние или набор методов. Будьте осторожны при назначении атрибутов. Это также дает интересные возможности :)
Здесь нет символических констант , только переменные. Убедитесь, что вы случайно не перезаписали «константу». Если вы хотите быть уверены, что не можете перезаписать константу, используйте функцию или свойство (которое является скрытой функцией).
Потоки Python хороши для обработки ввода-вывода, но не для процессора. Не пытайтесь ускорить вычислительную задачу, запустив ее в параллельных потоках.