Python itu dinamis. Pembuatan kelas adalah pernyataan yang dapat dieksekusi , seperti impor modul; itu bisa dibuat bersyarat. Kelas dapat diubah setelah penciptaan; ini memungkinkan untuk pemrograman mudah dan AOP.
Tidak ada antarmuka; aturan mengetik bebek. Jika Anda sangat membutuhkannya, ada 'kelas dasar abstrak (ABC)', tetapi biasanya Anda tidak ketinggalan antarmuka, karena bagaimanapun tidak ada pemeriksaan tipe statis.
Meskipun semuanya adalah objek, fungsi datang sebelum objek. Memiliki fungsi-fungsi yang adil (dan tidak ada kelas) dalam sebuah modul sangat baik.
Semuanya adalah entitas kelas satu. Melewati fungsi sebagai parameter, mengembalikannya dan menetapkan ke variabel adalah norma. Ditto untuk kelas-kelas. Metode hanyalah fungsi; Anda dapat menangani metode instance seolah-olah itu adalah fungsi biasa, menyebarkannya, dll.
Gunakan dicts bawaan, set, daftar, dan tupel. Daftar dan dikte dapat berubah, tuple tidak. Semuanya sangat efisien dan ringkas secara sintaksis. Biasakan mengembalikan beberapa nilai dari fungsi menggunakan tuple (Anda bahkan tidak perlu tanda kurung). Biasakan untuk mengganti hierarki kompleks dari objek yang sangat sederhana dengan alat yang terbuat dari daftar sederhana, tupel, dan dicts ('hashtables'), itu menyederhanakan kehidupan.
Python memiliki sedikit dukungan FP; pelajari daftar pemahaman dan kemudian iterator dan generator. Ini sangat membantu.
Setiap operator dapat kelebihan beban dengan mendefinisikan metode yang tepat, sehingga penambahan atau perbandingan dapat mengembalikan apa pun yang Anda inginkan. Ingat ini bekerja dengan hal-hal seperti SQLAlchemy.
Tidak ada null, hanya None, objek yang lengkap. Anda dapat mencetak Tidak Ada baik-baik saja, dll. Melewati Tidak Ada di mana contoh lain diharapkan menghasilkan biasanya dalam AttributeError, bukan NPE, kadang-kadang lebih jauh ke bawah pipa eksekusi.
Karena sifat Python yang sepenuhnya dinamis, Anda hampir tidak memiliki pemeriksaan statis . Anda dapat merujuk ke nama yang tidak pernah ada dalam program Anda (mis. Salah ketik), atau hanya akan didefinisikan dalam jalur eksekusi tertentu, dan tidak ada yang akan mengingatkan Anda tentang hal itu sampai eksekusi benar-benar mengenai referensi ini dan NameError dinaikkan. Berhati-hatilah dengan ruang lingkup variabel Anda, dan tulis lebih banyak unit test.
Karena sifat Python yang sepenuhnya dinamis, objek hampir selalu dapat ditempa. Biasanya Anda dapat menambahkan bidang dan metode bahkan ke sebuah instance dan dengan demikian secara tidak sengaja menghapus atau menimpa set negara atau metode. Hati-hati menugaskan atribut. Ini memungkinkan untuk kemungkinan yang menarik juga :)
Tidak ada konstanta simbolik , hanya variabel. Pastikan Anda tidak secara tidak sengaja menimpa 'konstan'. Jika Anda ingin yakin bahwa Anda tidak bisa menimpa konstanta, gunakan fungsi atau properti (yang merupakan fungsi yang menyamar).
Thread Python baik untuk pemrosesan I / O-terikat, tetapi tidak untuk CPU-terikat. Jangan mencoba mempercepat tugas komputasi dengan menjalankannya dalam utas paralel.