Eval, Exec dan Compile: Analisis Perbandingan
Perbezaan dalam Fungsi
Eval menilai satu ungkapan secara dinamik dan mengembalikan keputusan.
Exec melaksanakan blok kod yang diberikan dan membuang nilai pulangannya, terutamanya digunakan untuk kesan sampingannya.
Kompilasi dan Mod
Kompilasi memainkan peranan penting dalam eval dan eksekusi:
-
mod 'eval': Menyusun ungkapan tunggal ke dalam bytecode yang mengembalikan nilai yang dinilai nilai.
-
mod 'exec': Menghimpun serpihan kod apa-apa jenis ke dalam bytecode yang mengembalikan Tiada (dalam Python 2, ia adalah pernyataan dan tidak mengembalikan apa-apa).
Sintaks dan Perbezaan
Python 2
- Exec ialah pernyataan.
- Eval ialah fungsi.
- Exec menerima tuple panjang 2 atau 3 untuk mentakrifkan global dan tempatan ( hack untuk keserasian ke belakang).
Python 3
- Exec ialah fungsi.
- Exec dan eval berkelakuan sama apabila menghantar objek kod.
Perbandingan Terperinci
Menilai Ungkapan:
- Exec tidak menerima ungkapan secara langsung.
- Eval hanya menerima ungkapan tunggal sebagai rentetan atau objek kod.
Kesan Sampingan:
- Exec digunakan semata-mata untuk kesan sampingan seperti pengubahsuaian boleh ubah atau panggilan fungsi.
- Eval tidak mempunyai kesan sampingan, mengembalikan nilai ungkapan yang dinilai.
Penyata dan Blok Kod:
- Exec menerima blok kod yang mengandungi pernyataan, gelung dan import.
- Eval tidak boleh mengendalikan kenyataan secara langsung; ia memerlukan objek kod yang disusun untuk pernyataan.
Contoh Penggunaan
Mengira dan Mencetak:
a = 5
result = eval('37 + a') # Eval calculates the expression and returns the result (42)
exec('print(37 + a)') # Exec executes the code (prints 42)
Mengubah Suai Pembolehubah:
a = 2
exec('a = 47') # Exec modifies the global variable `a`
result = eval('a = 47') # Eval throws an error because it cannot handle statements
Atas ialah kandungan terperinci Eval vs. Exec vs. Compile dalam Python: Apakah Perbezaannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!
Kenyataan:Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn