Όλα όσα πρέπει να ξέρετε για το Eval στο Python

Αυτό το άρθρο θα σας δώσει μια λεπτομερή και περιεκτική γνώση του Eval στο Python, τα μειονεκτήματά του και τις χρήσεις με παραδείγματα.

Όπου κοιτάζετε γύρω σας, θα βρείτε μια εφαρμογή που έχει σχεδιαστεί ειδικά για να ικανοποιήσει τις ανάγκες σας. Αν και υπάρχουν πολλές γλώσσες προγραμματισμού που μπορούν να χρησιμοποιηθούν για την ανάπτυξη αυτών των εφαρμογών, οι περισσότερες από αυτές είναι κατασκευασμένες με χρήση . Η Python μαζί με τις εξαιρετικές δυνατότητές της και την αυξημένη ευελιξία φέρνει στο τραπέζι μοναδικές προσφορές που είναι τόσο ισχυρές όσο και εξαιρετικά χρήσιμες ανά πάσα στιγμή. Σε αυτό το άρθρο Eval in Python θα συζητήσουμε τα ακόλουθα σημεία:



Τι είναι το Eval στο Python;

Η λειτουργία eval στο Python είναι μια από τις πιο ενδιαφέρουσες επιλογές εκεί έξω. Κάποιοι το αποκαλούν hack και κάποιοι το ονομάζουν συντόμευση, αλλά με οποιονδήποτε τρόπο μπορείτε να το χρησιμοποιήσετε, για να εκτελέσετε ένα πρόγραμμα Python εντός κώδικα Python. Πολύ ωραίο, σωστά;



Όταν χρησιμοποιείτε τη συνάρτηση eval, ζητάτε βασικά από τον διερμηνέα να τρέξει που περικλείεται εντός του βραχίονα της συνάρτησης eval.

αλγόριθμοι και δομές δεδομένων σε Java

PythonLogo - Eval στην PythonΗ σύνταξη για τη χρήση της συνάρτησης eval στο Python είναι:



eval (έκφραση, σφαιρικά = Κανένα, ντόπιοι = Κανένα)

Στην παραπάνω σύνταξη,

  1. Εκφραση: Είναι η συμβολοσειρά ή το κομμάτι κώδικα που αναλύεται και αξιολογείται ως έκφραση Python μέσα στο ίδιο το πρόγραμμα Python.



  2. Παγκόσμια: Είναι το λεξικό που χρησιμοποιείται για τον καθορισμό όλων των διαθέσιμων καθολικών μεθόδων για την εκτέλεση της παραπάνω έκφρασης. Πρόκειται για μια προαιρετική οντότητα και οι χρήσεις της εξαρτώνται από τις ανάγκες σας.

  3. Ντόπιοι: Παρόμοια με τα παγκόσμια, αυτό είναι ένα άλλο λεξικό που χρησιμοποιείται για τον καθορισμό των διαθέσιμων τοπικών μεθόδων καθώς και των μεταβλητών.

Για να κατανοήσετε καλύτερα τη χρήση αυτής της λειτουργίας, ρίξτε μια ματιά στο παρακάτω παράδειγμα.

from math import * def secret_function (): return 'Secret key is 1234' def function_creator (): # expression to be evaluated expr = raw_input ('Enter the function (in xx):') # μεταβλητή που χρησιμοποιείται στην έκφραση x = int (raw_input ('Εισάγετε την τιμή του x:')) # αξιολόγηση της έκφρασης y = eval (expr) # εκτύπωση αξιολογημένου αποτελέσματος εκτύπωσης ('y = {}'. μορφή (y)) εάν __name__ == '__main__': function_creator ()

Στο παραπάνω παράδειγμα, το function_creator είναι μια συνάρτηση που θα αξιολογήσει τις μαθηματικές εκφράσεις που δημιουργούνται από τον χρήστη όταν εκτελείται το πρόγραμμα.

Παραγωγή:

Εισαγάγετε τη συνάρτηση (σε όρους x): x * (x + 1) * (x + 2)

Εισαγάγετε την τιμή του x: 3

y = 60

συμβολοσειρά java cast μέχρι σήμερα

Ανάλυση

Τώρα που έχετε δει τον κώδικα που κοινοποιήθηκε παραπάνω, ας τον αναλύσουμε λίγο πιο πέρα.

  1. Η παραπάνω συνάρτηση θα λάβει οποιαδήποτε μεταβλητή στην έκφραση x ως είσοδο της.

  2. Μόλις εκτελεστεί, θα ζητηθεί από τον χρήστη να εισαγάγει μια τιμή για το x, μόνο μετά την οποία θα δημιουργηθεί το πρόγραμμα.

  3. Τέλος, το πρόγραμμα Python θα εκτελέσει τη συνάρτηση eval αναλύοντας τοπ.χ.ως επιχείρημα.

Μειονεκτήματα του Eval

Παρόμοια με άλλες ενσωματωμένες λειτουργίες του Python, το eval έρχεται επίσης με μερικά μειονεκτήματα που μπορεί να δημιουργήσουν πρόβλημα εάν δεν ληφθούν υπόψη.

Εάν κοιτάξετε το παραπάνω παράδειγμα, μία από τις κύριες ευπάθειες της συνάρτησης, το function_creator είναι ότι μπορεί να εκθέσει τυχόν κρυφές τιμές στο πρόγραμμα και επίσης να καλέσει μια επιβλαβή λειτουργία καθώς το eval από προεπιλογή θα εκτελέσει οτιδήποτε βρίσκεται στην παρένθεση.

Για να το κατανοήσετε περαιτέρω, ρίξτε μια ματιά στο παρακάτω παράδειγμα.

Είσοδος από χρήστη

Εισαγάγετε τη συνάρτηση (σε όρους x): secret_function ()

Εισαγάγετε την τιμή του x: 0

Παραγωγή:

y = Το μυστικό κλειδί είναι 1234

Μια άλλη επικίνδυνη κατάσταση που συνοδεύεται από τη χρήση της λειτουργίας eval είναι η εισαγωγή λειτουργικής μονάδας OS. Όταν εισαγάγετε τη λειτουργική μονάδα os, επιτρέπει στην Python να διαβάζει και να γράφει τυχόν αρχεία που υπάρχουν στο εγγενές σας σύστημα χωρίς έλεγχο ταυτότητας από τον χρήστη. Σε μια τέτοια περίπτωση, εάν πληκτρολογήσετε εσφαλμένα έναγραμμή κώδικα, όλα τα εγγενή αρχεία σας ενδέχεται να διαγραφούν.

Η λύση σε όλα αυτά τα μειονεκτήματα έγκειται στον περιορισμό των δυνατοτήτων της συνάρτησης eval.

Κάνοντας το Eval ασφαλές στο Python

Το Eval από προεπιλογή συνοδεύεται από την επιλογή ανάλυσης οποιασδήποτε λειτουργίας στην οποία έχει πρόσβαση ή οποιονδήποτε έχει ήδη καθοριστεί. Έχοντας αυτό κατά νου κατά τη σύνταξη του κωδικού σας, θα περιορίσετε τις δυνατότητες του eval σε σημαντικό βαθμό, διασφαλίζοντας έτσι ότι εσείς ότι τίποτα δεν πάει στραβά.

Για να κατανοήσετε περαιτέρω αυτήν την ιδέα, ρίξτε μια ματιά στο παρακάτω παράδειγμα.

from math import * def secret_function (): return 'Secret key is 1234' def function_creator (): # expression to be evaluated expr = raw_input ('Enter the function (in xx):') # μεταβλητή που χρησιμοποιείται στην έκφραση x = int (raw_input ('Enter the value of x:')) # μεταβαλλόμενη μεταβλητή x στο ασφαλές λεξικό safe_dict ['x'] = x # αξιολόγηση έκφρασης y = eval (expr, {'__builtins __': None}, safe_dict) # εκτύπωση αξιολόγηση αποτελεσμάτων εκτύπωσης ('y = {}'. format (y)) εάν __name__ == '__main__': # λίστα ασφαλών μεθόδων safe_list = ['acos', 'asin', 'atan', 'atan2', 'ceil ',' cos ',' cosh ',' degrees ',' e ',' exp ',' fabs ',' floor ',' fmod ',' frexp ',' hypot ',' ldexp ',' log ', 'log10', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh'] # δημιουργία λεξικού ασφαλών μεθόδων safe_dict = υπαγόρευση ([(k, ντόπιοι (). get (k, None)) για k σε safe_list]) function_creator ()

Είσοδος από χρήστη

Εισαγάγετε τη συνάρτηση (σε όρους x): secret_function ()

Εισαγάγετε την τιμή του x: 0

Παραγωγή:

NameError: το όνομα 'secret_function' δεν έχει οριστεί

Όπως μπορείτε να δείτε, περιορίζοντας την πρόσβαση του eval, οι πιθανότητες μιας λανθασμένης παραγωγής που μπορεί να αποδειχθεί επιβλαβής έχουν αναιρεθεί.

Χρήσεις του Eval

Όπως εξηγείται στις παραπάνω ενότητες, για πολλούς λόγους ασφαλείας το eval δεν χρησιμοποιείται τόσο συχνά. Ωστόσο, υπάρχουν συγκεκριμένες περιπτώσεις χρήσης όπου η χρήση του eval αποδεικνύεται χρήσιμη. Μερικά από τα πιο σημαντικά από αυτά είναι.

μετατροπή συμβολοσειράς σε ημερομηνία σε java
  1. Εάν θέλετε ο χρήστης να εισαγάγει τα δικά του scriptlet για να τροποποιήσει την έξοδο του προγράμματος, τότε η χρήση της λειτουργίας eval θα αποδειχθεί χρήσιμη.

  2. Ενώ γράφετε εκφράσεις για την επίλυση μαθηματικών ερωτημάτων, μπορείτε να κάνετε χρήση του eval, καθώς είναι πολύ πιο εύκολο από το γράψιμο ενός αναλυτή έκφρασης.

Τώρα που γνωρίζετε τα πάντα για το eval, ελπίζουμε ότι θα το χρησιμοποιήσετε στον καθημερινό σας προγραμματισμό, έχοντας παράλληλα υπόψη τα πλεονεκτήματα και τα μειονεκτήματα.

Με αυτό, καταλήγουμε στο άρθρο αυτού του Eval in Python. Για να μάθετε σε βάθος την Python μαζί με τις διάφορες εφαρμογές της, μπορείτε για ζωντανή διαδικτυακή εκπαίδευση με 24ωρη υποστήριξη και πρόσβαση σε όλη τη διάρκεια ζωής.

Έχετε μια ερώτηση για εμάς; Αναφέρετέ τα στην ενότητα σχολίων του 'Eval in Python' και θα επικοινωνήσουμε μαζί σας.