Semua Yang Anda Perlu Tahu Mengenai Eval di Python



Artikel ini akan memberi anda pengetahuan terperinci dan komprehensif mengenai Eval di Python, Kelemahan dan penggunaannya dengan contoh.

Di mana sahaja anda melihat sekeliling anda, anda akan menemui aplikasi yang telah dibuat khusus untuk memenuhi keperluan anda. Walaupun terdapat banyak bahasa pengaturcaraan yang dapat digunakan untuk mengembangkan aplikasi ini, kebanyakan daripadanya dibuat menggunakan . Python bersama dengan keistimewaannya dan peningkatan keserbagunaan menghadirkan persembahan unik di meja yang sangat hebat dan sangat berguna sepanjang masa. Dalam artikel Eval in Python ini kita akan membincangkan perkara berikut:

Apakah Eval di Python?

Fungsi eval di Python adalah salah satu pilihan paling menarik di luar sana. Ada yang menyebutnya hack dan ada yang memanggilnya jalan pintas, tetapi dengan cara apa pun anda boleh menggunakannya, untuk menjalankan program Python dalam kod Python. Cukup sejuk kan?





Apabila anda menggunakan fungsi eval, anda pada dasarnya mendesak jurubahasa untuk menjalankan yang tertutup dalam kurungan fungsi eval.

PythonLogo- Eval di PythonSintaks untuk menggunakan fungsi eval di Python adalah:



eval (ungkapan, global = Tiada, penduduk tempatan = Tiada)

Dalam sintaks di atas,

  1. Ungkapan: Ini adalah rentetan atau potongan kod yang dihurai dan dinilai sebagai ungkapan Python dalam program Python itu sendiri.



  2. Global: Kamus inilah yang digunakan untuk menentukan semua kaedah global yang ada untuk melaksanakan ungkapan yang disebutkan di atas. Ini adalah entiti pilihan dan penggunaannya bergantung pada keperluan anda.

  3. Penduduk tempatan: Sama dengan global, ini adalah kamus lain yang digunakan untuk menentukan kaedah tempatan dan pemboleh ubah yang tersedia.

Untuk memahami penggunaan fungsi ini dengan lebih baik, perhatikan contoh di bawah.

dari matematik import * def secret_function (): return 'Secret key is 1234' def function_creator (): # ekspresi yang akan dinilai expr = raw_input ('Enter the function (in the x))') # pemboleh ubah yang digunakan dalam ungkapan x = int (raw_input ('Masukkan nilai x:')) # menilai ekspresi y = eval (expr) # percetakan dinilai hasil cetak ('y = {}'. format (y)) jika __name__ == '__main__': function_creator ()

Dalam contoh di atas, function_creator adalah fungsi yang akan menilai ungkapan matematik yang dibuat oleh pengguna ketika program dijalankan.

Pengeluaran:

Masukkan fungsi (dalam bentuk x): x * (x + 1) * (x + 2)

Masukkan nilai x: 3

y = 60

Analisis

Sekarang setelah anda melihat kod yang dikongsi di atas, mari kita menganalisisnya lebih jauh.

  1. Fungsi di atas akan mengambil sebarang pemboleh ubah dalam ungkapan x sebagai inputnya.

  2. Setelah dijalankan, pengguna akan diminta memasukkan nilai untuk x, hanya setelah itu akan dihasilkan program yang akan dihasilkan.

  3. Akhirnya, program Python akan melaksanakan fungsi eval dengan menghuraikanexprsebagai hujah.

Kekurangan Eval

Sama dengan fungsi Python bawaan lain, eval juga dilengkapi dengan beberapa kekurangan yang mungkin menimbulkan masalah jika tidak diperhitungkan.

Sekiranya anda melihat contoh di atas, salah satu kelemahan utama fungsi, function_creator adalah bahawa ia dapat mendedahkan nilai tersembunyi dalam program dan juga memanggil fungsi berbahaya kerana eval secara lalai akan melaksanakan apa sahaja yang berada dalam kurungannya.

Untuk memahami perkara ini dengan lebih lanjut, lihat contoh di bawah.

Input dari Pengguna

Masukkan fungsi (dalam sebutan x): secret_function ()

Masukkan nilai x: 0

Pengeluaran:

y = Kekunci rahsia ialah 1234

Situasi berbahaya lain yang terdapat pada penggunaan fungsi eval adalah mengimport modul os. Apabila anda telah mengimport modul os, ia membolehkan Python membaca dan menulis sebarang fail yang terdapat pada sistem asli anda tanpa pengesahan dari pengguna. Sekiranya berlaku, jika anda salah menaip satubaris kod, semua fail asli anda mungkin dihapuskan.

Penyelesaian untuk semua kekurangan ini terletak pada menyekat kemampuan fungsi eval.

Menjadikan Eval Selamat di Python

Eval secara lalai dilengkapi dengan pilihan untuk menguraikan fungsi yang dapat diakses atau yang sudah ditentukan. Mengingat ini semasa menulis kod anda, akan mengehadkan kemampuan eval ke tahap yang besar sehingga memastikan bahawa anda tidak ada yang salah.

Untuk memahami konsep ini dengan lebih lanjut, lihat contoh di bawah.

dari matematik import * def secret_function (): return 'Secret key is 1234' def function_creator (): # ekspresi yang akan dinilai expr = raw_input ('Enter the function (in the x))') # pemboleh ubah yang digunakan dalam ungkapan x = int (raw_input ('Masukkan nilai x:')) # pemboleh ubah lulus x dalam kamus selamat safe_dict ['x'] = x # evaluasi ungkapan y = eval (expr, {'__builtins __': None}, safe_dict) # percetakan hasil cetakan yang dinilai ('y = {}'. format (y)) jika __nama__ == '__main__': # senarai kaedah selamat safe_list = ['acos', 'asin', 'atan', 'atan2', 'ceil ',' cos ',' cosh ',' darjah ',' e ',' exp ',' fabs ',' floor ',' fmod ',' frexp ',' hypot ',' ldexp ',' log ', 'log10', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh'] # mewujudkan kamus kaedah selamat safe_dict = dikt ([(k, penduduk tempatan (). dapatkan (k, Tiada)) untuk k dalam safe_list]) function_creator ()

Input dari Pengguna

tetapkan laluan kelas untuk java

Masukkan fungsi (dalam sebutan x): secret_function ()

Masukkan nilai x: 0

Pengeluaran:

NameError: nama 'secret_function' tidak ditentukan

Seperti yang anda lihat dengan menghadkan akses eval, kemungkinan output yang salah yang dapat membuktikan berbahaya telah ditolak.

Kegunaan Eval

Seperti yang dijelaskan dalam bahagian di atas, kerana beberapa sebab keselamatan, eval tidak begitu biasa digunakan. Tetapi masih ada kes penggunaan tertentu di mana penggunaan eval terbukti bermanfaat. Beberapa yang paling penting adalah.

  1. Sekiranya anda ingin pengguna memasukkan skrip mereka sendiri untuk mengubah output program, maka menggunakan fungsi eval akan terbukti bermanfaat.

  2. Semasa menulis ungkapan untuk menyelesaikan pertanyaan matematik, anda boleh menggunakan eval kerana lebih mudah daripada menulis penghurai ekspresi.

Sekarang setelah anda mengetahui semua tentang eval, kami harap anda dapat memanfaatkan hal yang sama dalam pengaturcaraan harian anda sambil mengingat kelebihan dan kekurangannya.

Dengan ini, kita akan mengakhiri artikel Eval in Python ini. Untuk mendapatkan pengetahuan mendalam tentang Python bersama dengan pelbagai aplikasinya, anda boleh untuk latihan dalam talian secara langsung dengan sokongan 24/7 dan akses seumur hidup.

Ada soalan untuk kami? Sebutkan mereka di bahagian komen 'Eval in Python' dan kami akan menghubungi anda.