Επιστροφή στο blog

Χρήση των Παραμέτρων *args και **kwargs στον Κώδικά σας: Ένα Tutorial για την Python 3

Χρήση των Παραμέτρων *args και **kwargs στον Κώδικά σας: Ένα Tutorial για την Python 3

Εισαγωγή

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

Ωστόσο, δεν είναι δυνατόν να γνωρίζετε κατά τη στιγμή της συγγραφής του κώδικα ποιες ακριβώς περιπτώσεις χρήσης ενδέχεται να υλοποιηθούν με τον κώδικά σας. Ως εκ τούτου, για χάρη των μελλοντικών προγραμματιστών και χρηστών του προγράμματός σας, συνιστάται να μεταβιβάζετε έναν μεταβλητό αριθμό ορισμάτων σε μια συνάρτηση. Για να το κάνετε αυτό, πρέπει να χρησιμοποιήσετε ειδικές παραμέτρους. Αυτές είναι *args και **kwargs. Σε αυτόν τον οδηγό, θα μάθουμε τα πάντα για τις παραμέτρους *args και **kwargs στην Python. Θα μάθουμε επίσης πώς να ταξινομούμε τα ορίσματα και πώς να τα εφαρμόζουμε σε κλήσεις συναρτήσεων.

Προαπαιτούμενα

Για να μπορέσετε να ακολουθήσετε τα βήματα του οδηγού, υπάρχουν ορισμένα προαπαιτούμενα που πρέπει να προετοιμάσετε. Αρχικά, πρέπει να έχετε εγκατεστημένη την Python 3 στον διακομιστή σας με ένα περιβάλλον προγραμματισμού σε λειτουργία. Πρέπει επίσης να έχετε εγκατεστημένο το πρόγραμμα για το συγκεκριμένο λειτουργικό σας σύστημα (Ubuntu, CentOS, Debian, κ.λπ.).

Τι είναι το *args και πώς λειτουργεί;

Ας ξεκινήσουμε κατανοώντας πώς λειτουργεί το *args λειτουργεί. Η έκδοση της παραμέτρου με ένα μόνο αστερίσκο χρησιμοποιείται για την αποστολή λιστών ορισμάτων μεταβλητού μήκους χωρίς λέξεις-κλειδιά σε συναρτήσεις. Έχετε υπόψη σας ότι ο αστερίσκος είναι το πιο κρίσιμο στοιχείο σε αυτήν την παράμετρο.

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

Όπως μπορείτε να δείτε, τα ορίσματά μας στην παραπάνω συνάρτηση είναι x και y. Κατά την κλήση της συνάρτησης, θα χρησιμοποιήσετε αριθμούς που αντιστοιχούν στα x και y. Ας υποθέσουμε ότι μεταβιβάζουμε τους ακέραιους αριθμούς 5 και 4 για τα x και y αντίστοιχα:

Τώρα μπορούμε να εκτελέσουμε τον κώδικα:

Το αποτέλεσμα που θα λάβουμε θα είναι το εξής:

Το αποτέλεσμα δείχνει ότι οι ακέραιοι 5 και 4 έχουν πολλαπλασιαστεί. Αυτό σημαίνει ότι η συνάρτηση multiply(x, y) λειτούργησε.

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

Επομένως, εάν έχετε κάποια ιδέα ότι μπορεί να χρειαστεί να προσθέσετε περισσότερα ορίσματα αργότερα, τότε εφαρμόστε την παράμετρο *args για δική σας διευκόλυνση. Μπορείτε να τη χρησιμοποιήσετε έτσι:

Απλώς αντικαταστήσαμε τις παραμέτρους της συνάρτησης x και y με το *args. Η εκτέλεση αυτού του κώδικα θα σας δώσει το γινόμενο για κάθε κλήση συνάρτησης, ως εξής:

Έτσι, το *args είναι ιδανικό για χρήση όταν θέλετε να στείλετε λίστες ορισμάτων μεταβλητού μήκους στη συνάρτησή σας. Λόγω της δυνατότητάς του, μπορείτε να μεταβιβάσετε όσα ορίσματα θέλετε στις κλήσεις συναρτήσεων. Ως εκ τούτου, αυτή η παράμετρος σας επιτρέπει να δημιουργήσετε πιο ευέλικτο κώδικα που μπορεί να δεχτεί έναν ικανοποιητικό αριθμό μεταβλητών ορισμάτων χωρίς λέξεις-κλειδιά στη συνάρτηση.

Τι είναι το **kwargs και πώς λειτουργεί;

Στη συνέχεια, έχουμε την έκδοση των παραμέτρων με διπλό αστερίσκο, η οποία είναι το **kwargs. Σε αντίθεση με την προηγούμενη μορφή, αυτή η παράμετρος σας επιτρέπει να μεταβιβάζετε λεξικά ορισμάτων μεταβλητού μήκους με λέξεις-κλειδιά στη συνάρτηση. Παρόμοια με το *args, οι διπλοί αστερίσκοι είναι το πιο κρίσιμο στοιχείο της παραμέτρου.

Όπως κάναμε στην προηγούμενη ενότητα, μπορείτε να προσθέσετε όσα ορίσματα θέλετε. Η διαφορά είναι ότι πρέπει να αντιστοιχίσετε λέξεις-κλειδιά. Για να κατανοήσετε καλύτερα, δείτε το ακόλουθο παράδειγμα. Εδώ, θα ξεκινήσουμε εκτυπώνοντας τα **kwargs ορίσματα που θέλουμε να μεταβιβάσουμε στη συνάρτηση:

Τώρα, ας καλέσουμε τη συνάρτηση. Όπως μπορείτε να δείτε, προσθέσαμε ορίσματα λέξεων-κλειδιών:

Η εκτέλεση του προγράμματος σε αυτό το σημείο θα σας εμφανίσει αυτό το αποτέλεσμα:

Ωστόσο, υπάρχει η πιθανότητα ο τύπος δεδομένων του λεξικού σας να μην είναι ταξινομημένος. Αυτό εξαρτάται σε μεγάλο βαθμό από την έκδοση της Python 3 που χρησιμοποιείτε. Για παράδειγμα, οποιαδήποτε έκδοση μετά την Python 3.6 σας δίνει τα ζεύγη κλειδιού-τιμής με τη σειρά. Οποιαδήποτε έκδοση προηγείται αυτής θα εμφανίσει το αποτέλεσμα με τυχαία σειρά. Το λεξικό που δημιουργείτε θα ονομάζεται kwargs. Σημειώστε ότι μπορείτε να το χρησιμοποιήσετε και να το χειριστείτε όπως οποιοδήποτε άλλο λεξικό στο σύστημα. Ας δούμε πώς μπορείτε να αξιοποιήσετε περισσότερο την παράμετρο **kwargs για μεγαλύτερη χρήση και εφαρμογή.

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

Η εκτέλεση του προγράμματος θα σας δώσει αυτό το αποτέλεσμα:

Παρόμοια με το προηγούμενο παράδειγμα, τα λεξικά μπορεί να εμφανίζονται μη ταξινομημένα. Ως εκ τούτου, η σειρά των ονομάτων Casey και Sammy μπορεί να αντιστραφεί σε ορισμένες περιπτώσεις.

Στη συνέχεια, θα μεταβιβάσουμε πρόσθετα ορίσματα στη συνάρτηση. Αυτό θα αποδείξει ότι μπορείτε να κάνετε το **kwargs να δέχεται οποιονδήποτε αριθμό ορισμάτων θέλετε:

Η εκτέλεση του προγράμματος θα σας εμφανίσει αυτό το αποτέλεσμα:

Αυτό το αποτέλεσμα μπορεί επίσης να μην είναι ταξινομημένο. Ανεξάρτητα από αυτό, αυτά τα παραδείγματα δείχνουν ότι το **kwargs δίνει στο πρόγραμμά σας την ευελιξία να χρησιμοποιεί έναν αριθμό ορισμάτων λέξεων-κλειδιών.

Πώς να ταξινομήσετε τα ορίσματα

Είναι σημαντικό να έχετε κατά νου την καθορισμένη σειρά κατά την ταξινόμηση ενός ορίσματος σε μια συνάρτηση ή κλήση συνάρτησης. Έχει ως εξής:

  1. Τυπικά ορίσματα θέσης

  2. *args

  3. Ορίσματα λέξεων-κλειδιών

  4. **kwargs

Ας υποθέσουμε ότι χρησιμοποιείτε *args και **kwargs με ρητές παραμέτρους θέσης. Αυτό σημαίνει ότι η συνάρτησή σας θα μοιάζει κάπως έτσι:

Από την άλλη πλευρά, η χρήση αυτών των παραμέτρων με ονομαστικές παραμέτρους (keyword parameters) θα δώσει στη συνάρτησή σας την ακόλουθη γενική δομή:

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

Πώς να χρησιμοποιήσετε τα *args και **kwargs σε κλήσεις συναρτήσεων

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

Υπάρχουν τρεις παράμετροι σε αυτή τη συνάρτηση: arg_1, arg_2, και arg_3. Πρέπει να δημιουργήσετε μια μεταβλητή και να την ορίσετε σε ένα επαναλήψιμο αντικείμενο (iterable). Σε αυτή την περίπτωση, θα είναι ένα tuple. Στη συνέχεια, μπορείτε να περάσετε τη μεταβλητή στη συνάρτηση χρησιμοποιώντας τη σύνταξη με τον αστερίσκο.

Παρατηρήστε το αποτέλεσμα όταν εκτελείτε το πρόγραμμα χρησιμοποιώντας την python some_args.py εντολή:

Είναι επίσης δυνατό να αλλάξετε το πρόγραμμα ώστε να χρησιμοποιεί έναν επαναλήψιμο τύπο δεδομένων λίστας (iterable list) data type με ένα διαφορετικό όνομα μεταβλητής. Ο ακόλουθος κώδικας συνδυάζει *args με μια ονομαστική παράμετρο:

Το αποτέλεσμα θα είναι το ακόλουθο κατά την εκτέλεση του προγράμματος:

Από την άλλη πλευρά, μπορείτε να εφαρμόσετε ορίσματα με λέξεις-κλειδιά (keyworded arguments) με **kwargs. Βεβαιωθείτε ότι έχετε δημιουργήσει μια μεταβλητή που είναι ίση με ένα λεξικό (dictionary). Θα πρέπει να έχει 2 ζεύγη κλειδιού-τιμής. Δείτε πώς θα περάσουμε τη μεταβλητή σε μια συνάρτηση με 3 ορίσματα:

Χρησιμοποιήστε την python some_kwargs.py εντολή για άλλη μια φορά για να εκτελέσετε το πρόγραμμα:

Συμπέρασμα

Μέχρι το τέλος αυτού του οδηγού, θα πρέπει να είστε καλά εξοικειωμένοι με το τι είναι τα *args και **kwargs και πώς λειτουργούν. Μπορείτε τώρα να εφαρμόσετε αυτές τις παραμέτρους στον δικό σας κώδικα για να κάνετε το πρόγραμμά σας ευέλικτο για μελλοντικούς χρήστες. Αυτές είναι ιδανικές για περιπτώσεις όπου δεν γνωρίζετε πόσα ορίσματα μπορεί να χρησιμοποιηθούν. Απλώς βεβαιωθείτε ότι είστε προσεκτικοί με τα κρίσιμα στοιχεία των συναρτήσεων και των παραμέτρων.

Τέλος, ακολουθούν περισσότεροι πόροι από το ιστολόγιό μας που θα σας βοηθήσουν να εργαστείτε με επιτυχία με την Python:

Καλή επιτυχία στον προγραμματισμό!

author

Pranay Kapgate

Συγγραφέας · CloudSigma

Ο Preslav Dobrev είναι Δημιουργικός Σχεδιαστής στην CloudSigma, με εστίαση στη συνεπή επιχειρηματική ταυτότητα μέσω παραδοσιακών και καινοτόμων καναλιών μάρκετινγκ. Διαθέτει την ικανότητα να συνδυάζει το καλλιτεχνικό όραμα με το στρατηγικό μάρκετινγκ για τη δημιουργία εντυπωσιακών αφηγήσεων επωνυμίας.

Σχόλια

Δεν υπάρχουν σχόλια ακόμα. Γράψτε το πρώτο.