Pertama, beberapa klarifikasi: Python adalah bahasa. Ada beberapa penerjemah berbeda yang dapat mengeksekusi kode yang ditulis dalam bahasa Python. Implementasi referensi (CPython) biasanya adalah apa yang sedang direferensikan ketika seseorang berbicara tentang "Python" seolah-olah itu adalah implementasi, tetapi penting untuk lebih tepat ketika berbicara tentang karakteristik kinerja, karena mereka dapat berbeda secara liar antara implementasi.
Bagaimana dan di mana kita merangkul SRP tanpa mengorbankan kinerja Python, karena implementasi inherennya berdampak langsung?
Kasus 1.)
Jika Anda memiliki kode Python murni (<= Python Language versi 3.5, 3.6 memiliki "dukungan level beta") yang hanya bergantung pada modul Python murni, Anda dapat merangkul SRP di mana-mana dan menggunakan PyPy untuk menjalankannya. PyPy ( https://morepypy.blogspot.com/2019/03/pypy-v71-released-now-uses-utf-8.html ) adalah juru bahasa Python yang memiliki Just in Time Compiler (JIT) dan dapat menghapus fungsi panggilan overhead selama memiliki waktu yang cukup untuk "pemanasan" dengan menelusuri kode yang dieksekusi (beberapa detik IIRC). **
Jika Anda dibatasi untuk menggunakan juru bahasa CPython, Anda dapat mengekstrak fungsi yang lambat menjadi ekstensi yang ditulis dalam C, yang akan dikompilasi sebelumnya dan tidak menderita overhead juru bahasa apa pun. Anda masih dapat menggunakan SRP di mana-mana, tetapi kode Anda akan dibagi antara Python dan C. Apakah ini lebih baik atau lebih buruk untuk pemeliharaan daripada meninggalkan SRP secara selektif tetapi hanya berpegang pada kode Python tergantung pada tim Anda, tetapi jika Anda memiliki bagian penting kinerja Anda kode, itu pasti akan lebih cepat daripada bahkan kode Python murni paling dioptimalkan ditafsirkan oleh CPython. Banyak perpustakaan matematika tercepat Python menggunakan metode ini (numpy and scipy IIRC). Yang merupakan segmen yang bagus ke Kasus 2 ...
Kasus 2.)
Jika Anda memiliki kode Python yang menggunakan ekstensi C (atau bergantung pada perpustakaan yang menggunakan ekstensi C), PyPy mungkin berguna atau mungkin tidak berguna tergantung pada bagaimana mereka ditulis. Lihat http://doc.pypy.org/en/latest/extending.html untuk detailnya, tetapi ringkasannya adalah bahwa CFFI memiliki overhead minimal sementara CTypes lebih lambat (menggunakannya dengan PyPy mungkin bahkan lebih lambat daripada CPython)
Cython ( https://cython.org/ ) adalah pilihan lain yang saya tidak punya banyak pengalaman dengannya. Saya menyebutkannya demi kelengkapan sehingga jawaban saya bisa "berdiri sendiri", tetapi jangan mengklaim keahlian apa pun. Dari penggunaan terbatas saya, rasanya saya harus bekerja lebih keras untuk mendapatkan peningkatan kecepatan yang sama saya bisa mendapatkan "gratis" dengan PyPy, dan jika saya membutuhkan sesuatu yang lebih baik daripada PyPy, itu sama mudahnya untuk menulis ekstensi C saya sendiri ( yang memiliki manfaat jika saya menggunakan kembali kode di tempat lain atau mengekstrak bagian dari itu ke perpustakaan, semua kode saya masih dapat berjalan di bawah Penerjemah Python dan tidak diharuskan untuk dijalankan oleh Cython).
Saya takut "terkunci ke dalam" Cython, sedangkan kode apa pun yang ditulis untuk PyPy dapat berjalan di bawah CPython juga.
** Beberapa catatan tambahan tentang PyPy dalam Produksi
Berhati-hatilah dalam membuat pilihan yang memiliki efek praktis "mengunci Anda" ke PyPy dalam basis kode besar. Karena beberapa perpustakaan pihak ketiga (sangat populer dan berguna) tidak bermain bagus karena alasan yang disebutkan sebelumnya, itu dapat menyebabkan keputusan yang sangat sulit nanti jika Anda menyadari bahwa Anda memerlukan salah satu perpustakaan tersebut. Pengalaman saya terutama dalam menggunakan PyPy untuk mempercepat beberapa (tetapi tidak semua) layanan mikro yang sensitif terhadap kinerja di lingkungan perusahaan di mana ia menambahkan kompleksitas yang dapat diabaikan pada lingkungan produksi kami (kami sudah memiliki banyak bahasa yang digunakan, beberapa dengan versi utama yang berbeda seperti 2.7 vs 3.5 menjalankan anyways).
Saya telah menemukan menggunakan PyPy dan CPython secara teratur memaksa saya untuk menulis kode yang hanya mengandalkan jaminan yang dibuat oleh spesifikasi bahasa itu sendiri, dan bukan pada detail implementasi yang dapat berubah sewaktu-waktu. Anda mungkin menganggap memikirkan perincian seperti itu sebagai beban tambahan, tetapi saya menganggapnya berharga dalam pengembangan profesional saya, dan saya pikir itu "sehat" untuk ekosistem Python secara keseluruhan.