Tidak, tidak .
Kompilasi ke kode byte CPython hanya diteruskan melalui pengoptimal lubang intip kecil yang dirancang untuk melakukan hanya pengoptimalan dasar (Lihat test_peepholer.py di rangkaian pengujian untuk mengetahui lebih lanjut tentang pengoptimalan ini).
Untuk melihat apa yang sebenarnya akan terjadi, gunakan dis
* untuk melihat instruksi yang dibuat. Untuk fungsi pertama, berisi tugas:
from dis import dis
dis(func)
2 0 LOAD_CONST 1 (42)
2 STORE_FAST 0 (a)
3 4 LOAD_FAST 0 (a)
6 RETURN_VALUE
Sedangkan untuk fungsi kedua:
dis(func2)
2 0 LOAD_CONST 1 (42)
2 RETURN_VALUE
Dua instruksi lagi (cepat) digunakan di yang pertama: STORE_FAST
dan LOAD_FAST
. Ini membuat penyimpanan cepat dan mengambil nilai dalam fastlocals
larik bingkai eksekusi saat ini. Kemudian, dalam kedua kasus tersebut, a RETURN_VALUE
dilakukan. Jadi, yang kedua sedikit lebih cepat karena lebih sedikit perintah yang diperlukan untuk dieksekusi.
Secara umum, ketahuilah bahwa compiler CPython konservatif dalam pengoptimalan yang dilakukannya. Itu tidak dan tidak mencoba menjadi secerdas kompiler lain (yang, secara umum, juga memiliki lebih banyak informasi untuk dikerjakan). Tujuan desain utama, selain benar-benar benar, adalah untuk a) membuatnya tetap sederhana dan b) secepat mungkin dalam menyusunnya sehingga Anda bahkan tidak menyadari bahwa fase kompilasi ada.
Pada akhirnya, Anda tidak perlu repot dengan masalah kecil seperti ini. Manfaat dalam kecepatan kecil, konstan dan, dikerdilkan oleh overhead yang diperkenalkan oleh fakta bahwa Python ditafsirkan.
* dis
adalah modul Python kecil yang membongkar kode Anda, Anda dapat menggunakannya untuk melihat bytecode Python yang akan dijalankan oleh VM.
Catatan: Seperti yang juga dinyatakan dalam komentar oleh @Jorn Vernee, ini khusus untuk implementasi CPython dari Python. Implementasi lain mungkin melakukan pengoptimalan yang lebih agresif jika mereka menginginkannya, CPython tidak.
dis.dis(..)
keduanya, Anda melihat bahwa ada perbedaan , jadi ya. Tetapi di sebagian besar aplikasi dunia nyata , biaya overhead ini dibandingkan dengan penundaan pemrosesan dalam fungsi tidak terlalu banyak.