Пітон динамічний. Створення класу - це виконуваний оператор , як і імпорт модуля; це можна зробити умовним. Клас можна змінити після створення; це дозволяє легко метапрограмування та AOP.
Там немає ні одного інтерфейсу; правила набору качки. Якщо вони вам відчайдушно потрібні, є "абстрактні базові класи (ABC)", але інтерфейси, як правило, не пропускаєте, оскільки статичного типу перевірка все одно не проходить.
Хоча все є об'єктом, функції стають перед об'єктами. Маючи в модулі просто функції (а не класи), це прекрасно.
Все - це першокласна сутність. Передача функцій як параметрів, повернення їх і присвоєння змінним є нормою. Дітто для занять. Методи - це лише функції; ви можете обробити метод екземпляра так, ніби це була звичайна функція, передайте її навколо і т.д.
Використовуйте вбудовані дикти, набори, списки та кортежі. Списки та дикти змінюються, кортежі - ні. Усі вони дуже ефективні та синтаксично стислі. Звикайте повертати кілька значень з функції за допомогою кортежу (вам навіть не потрібні дужки). Звикнути до заміни складних ієрархій дуже простих об'єктів на вилучення з простих списків, кортежів і диктів ("хештелів"), це спрощує життя.
Python має неабияку підтримку FP; вивчити розуміння списку, а потім ітератори та генератори. Вони дуже допомагають.
Будь-які оператори можуть бути перевантажені шляхом визначення правильних методів, тому додавання або порівняння може повернути все, що завгодно. Запам’ятайте це, працюючи з такими речами, як SQLAlchemy.
Немає нуля, лише None, повноцінний об’єкт. Ви можете надрукувати None просто чудово і т. Д. Передача None, коли очікується, що інший примірник призводить зазвичай до AttributeError, а не NPE, іноді далі вниз по конвеєру виконання.
Через повністю динамічний характер Python у вас майже немає статичних перевірок . Ви можете посилатися на ім'я, яке ніколи не існує у вашій програмі (наприклад, помилка друку), або лише визначається в певному шляху виконання, і нічого не буде нагадувати вам про це, поки виконання фактично не потрапить на цю посилання і не буде піднято NameError. Будьте обережні з обсягом змінних і пишіть більше одиничних тестів.
Завдяки повністю динамічному природі Python, об'єкти майже завжди є ковкими. Зазвичай ви можете додати поля та методи навіть до екземпляра і таким чином ненавмисно видалити або перезаписати його стан або набір методів. Будьте уважні при призначенні атрибутів. Це дозволяє і цікаві можливості :)
Там немає жодного символьних констант , тільки змінних. Переконайтеся, що ви ненавмисно не перезаписали "константу". Якщо ви хочете бути впевнені, що ви не можете перезаписати константу, використовуйте функцію або властивість (що є функцією в маскуванні).
Нитки Python добре підходять для обробки введення-виводу, але не для процесора. Не намагайтеся прискорити обчислювальну задачу, виконуючи її в паралельних потоках.