Rumah >pembangunan bahagian belakang >Tutorial Python >Apakah Perbezaan Antara Fungsi `eval`, `exec` dan `compile` Python?

Apakah Perbezaan Antara Fungsi `eval`, `exec` dan `compile` Python?

Patricia Arquette
Patricia Arquetteasal
2024-12-11 18:17:10645semak imbas

What are the Differences Between Python's `eval`, `exec`, and `compile` Functions?

Perbezaan Antara eval, exec dan compile

Pengenalan

Python menyediakan tiga alatan berkuasa untuk melaksanakan kod secara dinamik: eval, exec dan compile . Setiap satu mempunyai tujuan tertentu, dan penting untuk memahami perbezaan mereka.

eval

Eval digunakan untuk menilai satu ungkapan. Ia memerlukan rentetan yang mewakili ungkapan dan mengembalikan nilainya. Contohnya:

a = 5
result = eval('a + 10')
print(result)  # Output: 15

exec

Exec digunakan untuk melaksanakan blok kod. Ia memerlukan rentetan yang mewakili kod dan mengembalikan Tiada. Contohnya:

my_code = """
for i in range(5):
    print(i)
"""

exec(my_code)
# Output:
# 0
# 1
# 2
# 3
# 4

compile

Compile digunakan untuk menyusun kod ke dalam bytecode, yang kemudiannya boleh dilaksanakan oleh penterjemah. Ia memerlukan rentetan yang mewakili kod dan mod ('eval', 'exec' atau 'single').

Dalam mod 'eval', kompilasi menyusun satu ungkapan ke dalam bytecode yang mengembalikan nilai ungkapan. Dalam mod 'exec', ia menyusun blok kod ke dalam bytecode yang mengembalikan Tiada. Dalam mod 'tunggal', ia menyusun satu pernyataan atau ungkapan ke dalam bytecode yang mencetak repr nilai ungkapan.

Contohnya:

bytecode = compile('a + 10', 'my_code', 'eval')
result = eval(bytecode)
print(result)  # Output: 15

bytecode = compile("""
for i in range(5):
    print(i)
""", 'my_code', 'exec')
exec(bytecode)
# Output:
# 0
# 1
# 2
# 3
# 4

Ringkasan

Function What it does
eval Evaluates a single expression
exec Executes a block of code
compile Compiles code into bytecode

Atas ialah kandungan terperinci Apakah Perbezaan Antara Fungsi `eval`, `exec` dan `compile` Python?. 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