Python là năng động. Tạo một lớp là một câu lệnh thực thi , cũng như nhập một mô-đun; nó có thể được thực hiện có điều kiện. Một lớp có thể được thay đổi sau khi tạo; điều này cho phép dễ dàng lập trình siêu dữ liệu và AOP.
Không có giao diện; quy tắc gõ vịt. Nếu bạn rất cần chúng, có 'các lớp cơ sở trừu tượng (ABC)', nhưng thường thì bạn không bỏ lỡ các giao diện, vì dù sao cũng không có kiểu kiểm tra tĩnh.
Mặc dù tất cả mọi thứ là một đối tượng, các chức năng đến trước các đối tượng. Chỉ có các chức năng (và không có lớp) trong một mô-đun là hoàn toàn tốt.
Tất cả mọi thứ là một thực thể hạng nhất. Truyền các hàm làm tham số, trả về chúng và gán cho các biến là chuẩn. Ditto cho các lớp học. Phương thức chỉ là chức năng; bạn có thể xử lý một phương thức cá thể như thể nó là một hàm thông thường, truyền nó xung quanh, v.v.
Sử dụng các ký tự, bộ, danh sách và bộ dữ liệu tích hợp. Danh sách và dicts là có thể thay đổi, tuples không. Tất cả chúng đều rất hiệu quả và cú pháp cô đọng. Làm quen với việc trả về một số giá trị từ một hàm bằng cách sử dụng bộ dữ liệu (bạn thậm chí không cần dấu ngoặc đơn). Làm quen với việc thay thế hệ thống phân cấp phức tạp của các đối tượng rất đơn giản bằng các bản sao được tạo từ danh sách đơn giản, bộ dữ liệu và ký tự ('hashtables'), nó đơn giản hóa cuộc sống.
Python có một chút hỗ trợ FP; tìm hiểu danh sách và sau đó lặp và máy phát điện. Những điều này giúp rất nhiều.
Bất kỳ toán tử nào cũng có thể bị quá tải bằng cách xác định các phương thức thích hợp, vì vậy phép cộng hoặc so sánh có thể trả về bất cứ thứ gì bạn muốn. Hãy nhớ điều này làm việc với những thứ như SQLAlchemy.
Không có null, chỉ có Không, một đối tượng chính thức. Bạn có thể in Không chỉ đơn giản là tốt, v.v. Không vượt qua nơi mà một trường hợp khác được mong đợi thường có kết quả trong AttributionError, không phải NPE, đôi khi ở xa hơn trong đường ống thực thi.
Do tính chất hoàn toàn động của Python, bạn gần như không có kiểm tra tĩnh . Bạn có thể đề cập đến một tên không bao giờ tồn tại trong chương trình của bạn (ví dụ như một lỗi đánh máy) hoặc chỉ được xác định trong một đường dẫn thực thi cụ thể và không có gì nhắc nhở bạn về nó cho đến khi thực thi đánh vào tham chiếu này và NameError được đưa ra. Hãy cẩn thận với phạm vi của các biến của bạn và viết thêm các bài kiểm tra đơn vị.
Do tính chất hoàn toàn năng động của Python, các đối tượng hầu như luôn dễ uốn. Thông thường, bạn có thể thêm các trường và phương thức ngay cả vào một thể hiện và do đó vô tình xóa hoặc ghi đè lên trạng thái hoặc tập phương thức của nó. Hãy cẩn thận gán thuộc tính. Điều này cũng cho phép những khả năng thú vị :)
Không có hằng số tượng trưng , chỉ có các biến. Kiểm tra xem bạn không vô tình ghi đè lên 'hằng số'. Nếu bạn muốn chắc chắn tích cực rằng bạn không thể ghi đè lên hằng số, hãy sử dụng hàm hoặc thuộc tính (là hàm được ngụy trang).
Các luồng của Python tốt cho xử lý ràng buộc I / O, nhưng không bị ràng buộc với CPU. Đừng cố tăng tốc một tác vụ tính toán bằng cách chạy nó trong các luồng song song.