Εικόνα από johnstocker στο Freepik
Πριν από λίγο έγραψα ένα tutorial για γράφοντας αποτελεσματικό κώδικα Python. Σε αυτό, μίλησα για τη χρήση των διαχειριστών περιβάλλοντος και της δήλωσης με για την αποτελεσματική διαχείριση των πόρων.
Χρησιμοποίησα ένα απλό παράδειγμα χειρισμού αρχείων για να δείξω πώς τα αρχεία κλείνουν αυτόματα όταν η εκτέλεση εξέρχεται από το μπλοκ με — ακόμα κι αν υπάρχει εξαίρεση.
Ενώ ο χειρισμός αρχείων είναι ένα καλό πρώτο παράδειγμα, μπορεί γρήγορα να γίνει βαρετός. Αυτός είναι ο λόγος για τον οποίο θα ήθελα να εξετάσω άλλες ενδιαφέρουσες χρήσεις των διαχειριστών περιβάλλοντος —πέρα από το χειρισμό αρχείων— σε αυτό το σεμινάριο. Θα επικεντρωθούμε στον χειρισμό των συνδέσεων βάσεων δεδομένων, στη διαχείριση υποδιαδικασιών και στην αριθμητική κινητής υποδιαστολής υψηλής ακρίβειας.
Οι διαχειριστές περιβάλλοντος στην Python σάς επιτρέπουν να γράφετε καθαρότερο κώδικα όταν εργάζεστε με πόρους. Παρέχουν μια συνοπτική σύνταξη για τη ρύθμιση και την εξάλειψη πόρων μέσω:
- An εισάγετε λογική που καλείται όταν η εκτέλεση μπαίνει στο πλαίσιο και
- An έξοδος λογικά καλείται όταν η εκτέλεση βγαίνει από το περιβάλλον
Το απλούστερο παράδειγμα αυτού είναι ο χειρισμός αρχείων. Εδώ χρησιμοποιούμε το open()
λειτουργία στο with
δήλωση για να αποκτήσετε ένα πρόγραμμα χειρισμού αρχείων:
with open('filename.txt', 'w') as file:
file.write('Something random')
Αυτό αποκτά τον πόρο - το αντικείμενο αρχείου - που χρησιμοποιείται (γράφουμε στο αρχείο) μέσα στο μπλοκ κώδικα. Το αρχείο κλείνει μόλις η εκτέλεση βγει από το περιβάλλον. έτσι δεν υπάρχουν διαρροές πόρων.
Μπορείτε να γράψετε τη γενική έκδοση αυτού ως εξής:
with some_context() as ctx:
# do something useful on the resource!
# resource cleanup is automatic
Τώρα ας προχωρήσουμε στα συγκεκριμένα παραδείγματα.
Όταν δημιουργείτε εφαρμογές Python, είναι πολύ συνηθισμένο να συνδέεστε σε βάσεις δεδομένων και να κάνετε ερωτήσεις στους πίνακες που περιέχουν. Και η ροή εργασίας για να γίνει αυτό θα μοιάζει με αυτό:
- Εγκαταστήστε το σύνδεσμο βάσης δεδομένων για να εργαστείτε με τη βάση δεδομένων (όπως το psycopg2 για Postgres και το mysql-connector-python για βάσεις δεδομένων MySQL).
- Αναλύστε το αρχείο διαμόρφωσης για να ανακτήσετε τις παραμέτρους σύνδεσης.
- Χρησιμοποιήστε το
connect()
λειτουργία για τη δημιουργία σύνδεσης με τη βάση δεδομένων.
Σύνδεση στο db | Εικόνα από τον συγγραφέα
Αφού συνδεθείτε στη βάση δεδομένων, μπορείτε να δημιουργήσετε μια βάση δεδομένων για να υποβάλετε ερωτήματα στη βάση δεδομένων. Εκτελέστε ερωτήματα και ανακτήστε τα αποτελέσματα του ερωτήματος χρησιμοποιώντας τις μεθόδους εκτέλεσης και ανάκτησης του δρομέα.
Ερώτηση για το db | Εικόνα από τον συγγραφέα
Με αυτόν τον τρόπο, δημιουργείτε τους ακόλουθους πόρους: μια σύνδεση βάσης δεδομένων και έναν δρομέα βάσης δεδομένων. Τώρα ας κωδικοποιήσουμε ένα απλό γενικό παράδειγμα για να δούμε πώς μπορούμε να χρησιμοποιήσουμε τη σύνδεση και τα αντικείμενα του δρομέα ως διαχειριστές περιβάλλοντος.
Ανάλυση αρχείων TOML στην Python
Εξετάστε ένα δείγμα αρχείου TOML, ας πούμε db_config.toml, που περιέχει τις απαιτούμενες πληροφορίες για να συνδεθείτε στη βάση δεδομένων:
# db_config.toml
[database]
host = "localhost"
port = 5432
database_name = "your_database_name"
user = "your_username"
password = "your_password"
Note: Χρειάζεστε Python 3.11 ή νεότερη έκδοση για χρήση tomllib.
Η Python έχει ενσωματωμένο tomllib ενότητα (που εισήχθη στην Python 3.11) που σας επιτρέπει να αναλύετε αρχεία TOML. Έτσι, μπορείτε να ανοίξετε το αρχείο db_config.toml και να αναλύσετε τα περιεχόμενά του ως εξής:
import tomllib
with open('db_config.toml','rb') as file:
credentials = tomllib.load(file)['database']
Παρατηρήστε ότι πατάμε στην ενότητα «βάση δεδομένων» του αρχείου db_config.toml. ο load()
Η συνάρτηση επιστρέφει ένα λεξικό Python. Μπορείτε να το επαληθεύσετε εκτυπώνοντας τα περιεχόμενα του credentials
:
print(credentials)
Output >>>
{'host': 'localhost', 'port': 5432, 'database_name': 'your_database_name', 'user': 'your_username', 'password': 'your_password'}
Σύνδεση στη βάση δεδομένων
Ας υποθέσουμε ότι θέλετε να συνδεθείτε σε μια βάση δεδομένων Postgres. Μπορείτε να εγκαταστήσετε το υποδοχή psycopg2 χρησιμοποιώντας pip:
pip install psycopg2
Μπορείτε να χρησιμοποιήσετε τόσο τη σύνδεση όσο και τα αντικείμενα του δρομέα με δηλώσεις όπως φαίνεται:
import psycopg2
# Connect to the database
with psycopg2.connect(**credentials) as conn:
# Inside this context, the connection is open and managed
with conn.cursor() as cur:
# Inside this context, the cursor is open and managed
cur.execute('SELECT * FROM my_table')
result = cur.fetchall()
print(result)
Σε αυτόν τον κώδικα:
- Χρησιμοποιούμε το
with
δήλωση για τη δημιουργία ενός περιβάλλοντος για τη διαχείριση της σύνδεσης της βάσης δεδομένων. - Μέσα σε αυτό το πλαίσιο, δημιουργούμε ένα άλλο περιβάλλον για τη διαχείριση του δρομέα της βάσης δεδομένων. Ο κέρσορας κλείνει αυτόματα κατά την έξοδο από αυτό το εσωτερικό περιβάλλον.
- Επειδή η σύνδεση είναι επίσης κλειστή κατά την έξοδο από το εξωτερικό περιβάλλον, αυτή η κατασκευή διασφαλίζει τη σωστή διαχείριση τόσο της σύνδεσης όσο και του δρομέα—μειώνοντας την πιθανότητα διαρροών πόρων.
Μπορείτε επίσης να χρησιμοποιήσετε μια παρόμοια κατασκευή όταν εργάζεστε με βάσεις δεδομένων SQLite και MySQL.
Η υποδιεργασία της Python παρέχει λειτουργικότητα για την εκτέλεση εξωτερικών εντολών μέσα σε ένα σενάριο Python. ο subprocess.Popen()
ο κατασκευαστής δημιουργεί μια νέα υποδιεργασία. Το οποίο μπορείτε να χρησιμοποιήσετε σε α with
δήλωση όπως αυτή:
import subprocess
# Run an external command and capture its output
with subprocess.Popen(['ls', '-l'], stdout=subprocess.PIPE, text=True) as process:
output, _ = process.communicate()
print(output)
Εδώ, εκτελούμε την εντολή Bash ls -l
εντολή για μεγάλη λίστα των αρχείων στον τρέχοντα κατάλογο:
Output >>>
total 4
-rw-rw-r-- 1 balapriya balapriya 0 Jan 5 18:31 db_info.toml
-rw-rw-r-- 1 balapriya balapriya 267 Jan 5 18:32 main.py
Οι πόροι που σχετίζονται με την υποδιεργασία ελευθερώνονται μόλις η εκτέλεση εξέλθει από το περιβάλλον της with
δήλωση.
Ο ενσωματωμένος τύπος δεδομένων float στην Python δεν είναι κατάλληλος για αριθμητική κινητής υποδιαστολής υψηλής ακρίβειας. Χρειάζεστε όμως υψηλή ακρίβεια όταν εργάζεστε με οικονομικά δεδομένα, μετρήσεις αισθητήρων και παρόμοια. Για τέτοιες εφαρμογές, μπορείτε να χρησιμοποιήσετε το δεκαδικός αντ' αυτού.
Η localcontext()
λειτουργία επιστρέφει έναν διαχειριστή περιβάλλοντος. Έτσι μπορείτε να χρησιμοποιήσετε το localcontext()
λειτουργία στο with
δήλωση και ορίστε την ακρίβεια για το τρέχον περιβάλλον χρησιμοποιώντας όπως φαίνεται:
from decimal import Decimal, localcontext
with localcontext() as cur_context:
cur_context.prec = 40
a = Decimal(2)
b = Decimal(3)
print(a/b)
Εδώ είναι η έξοδος:
Output >>>
0.6666666666666666666666666666666666666667
Εδώ, η ακρίβεια ορίζεται σε 40 δεκαδικά ψηφία — αλλά μόνο εντός αυτού with
ΟΙΚΟΔΟΜΙΚΟ ΤΕΤΡΑΓΩΝΟ. Όταν η εκτέλεση εξέρχεται από το τρέχον περιβάλλον, η ακρίβεια επαναφέρεται στην προεπιλεγμένη ακρίβεια (των 28 δεκαδικών ψηφίων).
Σε αυτό το σεμινάριο, μάθαμε πώς οι διαχειριστές περιβάλλοντος μπορούν να χρησιμοποιηθούν για το χειρισμό συνδέσεων βάσεων δεδομένων, τη διαχείριση υποδιαδικασιών και πλαισίων σε αριθμητική κινητής υποδιαστολής υψηλής ακρίβειας.
Στο επόμενο σεμινάριο, θα δούμε πώς μπορούμε να δημιουργήσουμε προσαρμοσμένους διαχειριστές περιβάλλοντος στην Python. Μέχρι τότε, καλή κωδικοποίηση!
Bala Priya C είναι προγραμματιστής και τεχνικός συγγραφέας από την Ινδία. Της αρέσει να εργάζεται στη διασταύρωση των μαθηματικών, του προγραμματισμού, της επιστήμης δεδομένων και της δημιουργίας περιεχομένου. Οι τομείς ενδιαφέροντος και εξειδίκευσής της περιλαμβάνουν τα DevOps, την επιστήμη δεδομένων και την επεξεργασία φυσικής γλώσσας. Της αρέσει να διαβάζει, να γράφει, να κωδικοποιεί και τον καφέ! Επί του παρόντος, εργάζεται για να μάθει και να μοιράζεται τις γνώσεις της με την κοινότητα προγραμματιστών, γράφοντας σεμινάρια, οδηγούς με οδηγίες, απόψεις και πολλά άλλα.
- SEO Powered Content & PR Distribution. Ενισχύστε σήμερα.
- PlatoData.Network Vertical Generative Ai. Ενδυναμώστε τον εαυτό σας. Πρόσβαση εδώ.
- PlatoAiStream. Web3 Intelligence. Ενισχύθηκε η γνώση. Πρόσβαση εδώ.
- PlatoESG. Ανθρακας, Cleantech, Ενέργεια, Περιβάλλον, Ηλιακός, Διαχείριση των αποβλήτων. Πρόσβαση εδώ.
- PlatoHealth. Ευφυΐα βιοτεχνολογίας και κλινικών δοκιμών. Πρόσβαση εδώ.
- πηγή: https://www.kdnuggets.com/3-interesting-uses-of-python-context-managers?utm_source=rss&utm_medium=rss&utm_campaign=3-interesting-uses-of-pythons-context-managers
- :έχει
- :είναι
- :δεν
- $UP
- 1
- 11
- 12
- 28
- 31
- 32
- 40
- 7
- 8
- 9
- a
- ΠΛΗΡΟΦΟΡΙΕΣ
- Αποκτά
- πριν
- επιτρέπουν
- Επίσης
- an
- και
- Άλλος
- εφαρμογές
- ΕΙΝΑΙ
- περιοχές
- AS
- συσχετισμένη
- At
- συγγραφικός
- Αυτόματο
- αυτομάτως
- b
- βίαιο χτύπημα
- BE
- Αποκλεισμός
- Βαρετό
- και οι δύο
- Κτίριο
- ενσωματωμένο
- αλλά
- by
- που ονομάζεται
- CAN
- πιάνω
- ευκαιρία
- καθαριστής
- κλειστό
- κωδικός
- Κωδικοποίηση
- Κοινός
- κοινότητα
- συνοπτικός
- Connect
- συνδεδεμένος
- σύνδεση
- Διασυνδέσεις
- κατασκευάσει
- περιέχουν
- περιεχόμενο
- δημιουργία περιεχομένου
- περιεχόμενα
- συμφραζόμενα
- πλαίσια
- δημιουργία
- δημιουργεί
- δημιουργία
- Διαπιστεύσεις
- Ρεύμα
- Τη στιγμή
- έθιμο
- ημερομηνία
- επιστημονικά δεδομένα
- βάση δεδομένων
- βάσεις δεδομένων
- Προεπιλογή
- Εργολάβος
- DevOps
- do
- πράξη
- κάτω
- αποτελεσματικός
- αποτελεσματικά
- εξασφαλίζει
- Εισέρχεται
- εγκαθιδρύω
- παράδειγμα
- παραδείγματα
- εξαίρεση
- εκτέλεση
- Έξοδος
- εξόδους
- εξειδίκευση
- εξωτερικός
- Αρχεία
- Αρχεία
- οικονομικός
- ΟΙΚΟΝΟΜΙΚΑ ΣΤΟΙΧΕΙΑ
- Όνομα
- φλοτέρ
- επιπλέων
- Συγκέντρωση
- Εξής
- Για
- από
- λειτουργία
- λειτουργικότητα
- παίρνω
- Go
- καλός
- Οδηγοί
- Χειρισμός
- ευτυχισμένος
- αυτήν
- εδώ
- Ψηλά
- οικοδεσπότης
- Πως
- HTML
- HTTPS
- i
- if
- εικόνα
- εισαγωγή
- in
- περιλαμβάνουν
- Ινδία
- πληροφορίες
- εσωτερικός
- μέσα
- εγκαθιστώ
- αντί
- τόκος
- ενδιαφέρον
- διασταύρωση
- σε
- εισήγαγε
- IT
- ΤΟΥ
- Ιανουάριος
- jpg
- KDnuggets
- γνώση
- Γλώσσα
- αργότερα
- Διαρροές
- μάθει
- μάθηση
- Αφήνει
- Μου αρέσει
- συμπαθεί
- Λιστα
- λογική
- Μακριά
- ματιά
- μοιάζει
- Κυρίως
- διαχείριση
- διαχειρίζεται
- Διευθυντές
- διαχείριση
- μαθηματικά
- μέθοδοι
- ενότητα
- περισσότερο
- MySQL
- Φυσικό
- Φυσική γλώσσα
- Επεξεργασία φυσικής γλώσσας
- Ανάγκη
- Νέα
- επόμενη
- Όχι.
- τώρα
- αντικειμένων
- of
- on
- μια φορά
- αποκλειστικά
- ανοίξτε
- Γνώμη
- or
- ΑΛΛΑ
- έξω
- παραγωγή
- επί
- παράμετροι
- Κωδικός Πρόσβασης
- κομμάτια
- σωλήνας
- Μέρη
- Πλάτων
- Πληροφορία δεδομένων Plato
- Πλάτωνα δεδομένα
- Σημείο
- Ακρίβεια
- εκτύπωση
- προχωρήσει
- διαδικασια μας
- μεταποίηση
- Προγραμματισμός
- δεόντως
- παρέχουν
- παρέχει
- Python
- ερωτήματα
- γρήγορα
- αρκετά
- τυχαίος
- RE
- Ανάγνωση
- απαιτείται
- πόρος
- Υποστηρικτικό υλικό
- ανακαινισμένο
- αποτέλεσμα
- Αποτελέσματα
- Επιστροφές
- τρέξιμο
- s
- λένε
- Επιστήμη
- γραφή
- Τμήμα
- δείτε
- επιλέξτε
- αισθητήρα
- σειρά
- μοιράζονται
- αυτή
- δείχνουν
- παρουσιάζεται
- παρόμοιες
- Απλούς
- So
- κάτι
- συγκεκριμένες
- Δήλωση
- δηλώσεις
- τέτοιος
- κατάλληλος
- σύνταξη
- Πατήστε
- Τεχνικός
- ότι
- Η
- τότε
- Εκεί.
- αυτοί
- αυτό
- Μέσω
- προς την
- πολύ
- Σύνολο
- φροντιστήριο
- tutorials
- τύπος
- μέχρι
- χρήση
- μεταχειρισμένος
- χρήσιμος
- Χρήστες
- χρησιμοποιεί
- χρησιμοποιώντας
- επαληθεύει
- εκδοχή
- W
- θέλω
- we
- πότε
- Ποιό
- ενώ
- WHY
- θα
- με
- εντός
- Εργασία
- ροής εργασίας
- εργαζόμενος
- γράφω
- συγγραφέας
- γραφή
- Έγραψε
- εσείς
- zephyrnet