Python * args και ** kwargs (Με παραδείγματα)

Σε αυτό το άρθρο, θα μάθουμε για τα Python * args και ** kwargs, τις χρήσεις και τις λειτουργίες τους με παραδείγματα.

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

Σας συνιστούμε να διαβάσετε τα επιχειρήματα Python Function και Python Function.

Ας υποθέσουμε, ορίζουμε μια συνάρτηση για προσθήκη 3 αριθμών.

Παράδειγμα 1: Λειτουργία προσθήκης 3 αριθμών

 def adder(x,y,z): print("sum:",x+y+z) adder(10,12,13)

Όταν εκτελούμε το παραπάνω πρόγραμμα, η έξοδος θα είναι

 άθροισμα: 35

Στο παραπάνω πρόγραμμα έχουμε adder()λειτουργία με τρία ορίσματα x, y και z. Όταν περνάμε τρεις τιμές κατά τη adder()λειτουργία κλήσης , λαμβάνουμε το άθροισμα των 3 αριθμών ως έξοδο.

Ας δούμε τι συμβαίνει όταν περνάμε περισσότερα από 3 ορίσματα στη adder()συνάρτηση.

 def adder(x,y,z): print("sum:",x+y+z) adder(5,10,15,20,25)

Όταν εκτελούμε το παραπάνω πρόγραμμα, η έξοδος θα είναι

 TypeError: το adder () παίρνει 3 ορίσματα θέσης, αλλά 5 δόθηκαν

Στο παραπάνω πρόγραμμα, περάσαμε 5 ορίσματα στη adder()συνάρτηση αντί για 3 ορίσματα λόγω των οποίων έχουμε TypeError.

Εισαγωγή στα * args και ** kwargs στην Python

Στο Python, μπορούμε να μεταφέρουμε έναν μεταβλητό αριθμό ορισμάτων σε μια συνάρτηση χρησιμοποιώντας ειδικά σύμβολα. Υπάρχουν δύο ειδικά σύμβολα:

  1. * args (Επιχειρήματα χωρίς λέξεις-κλειδιά)
  2. ** kwargs (Επιχειρήματα λέξεων-κλειδιών)

Χρησιμοποιούμε * args και ** kwargs ως επιχείρημα όταν δεν είμαστε σίγουροι για τον αριθμό των ορισμάτων που θα περάσουν στις συναρτήσεις.

Ο Python * υποστηρίζει

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

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

Παράδειγμα 2: Χρησιμοποιώντας * args για να μεταβιβάσετε τα ορίσματα μεταβλητού μήκους στη συνάρτηση

 def adder(*num): sum = 0 for n in num: sum = sum + n print("Sum:",sum) adder(3,5) adder(4,5,6,7) adder(1,2,3,5,6)

Όταν εκτελούμε το παραπάνω πρόγραμμα, η έξοδος θα είναι

 Άθροισμα: 8 Άθροισμα: 22 Άθροισμα: 17

Στο παραπάνω πρόγραμμα, χρησιμοποιήσαμε το * num ως παράμετρο που μας επιτρέπει να μεταφέρουμε τη λίστα ορίσματος μεταβλητού μήκους στη adder()συνάρτηση. Μέσα στη συνάρτηση, έχουμε έναν βρόχο που προσθέτει το όρισμα που πέρασε και εκτυπώνει το αποτέλεσμα. Περάσαμε 3 διαφορετικές πλειάδες με μεταβλητό μήκος ως όρισμα στη συνάρτηση.

Python ** kwargs

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

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

Παράδειγμα 3: Χρήση ** kwargs για τη μετάδοση των ορισμάτων των μεταβλητών λέξεων-κλειδιών στη συνάρτηση

 def intro(**data): print("Data type of argument:",type(data)) for key, value in data.items(): print("() is ()".format(key,value)) intro(Firstname="Sita", Lastname="Sharma", Age=22, Phone=1234567890) intro(Firstname="John", Lastname="Wood", Email="[email protected]", Country="Wakanda", Age=25, Phone=9876543210)

Όταν εκτελούμε το παραπάνω πρόγραμμα, η έξοδος θα είναι

 Τύπος δεδομένων ορίσματος: Το όνομα είναι Sita Το επώνυμο είναι Sharma Ηλικία είναι 22 Το τηλέφωνο είναι 1234567890 Τύπος δεδομένων του επιχειρήματος: Το όνομα είναι John Lastname είναι Wood Το ηλεκτρονικό ταχυδρομείο είναι [email protected] Η χώρα είναι Wakanda Ηλικία είναι 25 Το τηλέφωνο είναι 9876543210

Στο παραπάνω πρόγραμμα, έχουμε μια συνάρτηση intro()με ** δεδομένα ως παράμετρο. Περάσαμε δύο λεξικά με μεταβλητό μήκος ορίσματος στη intro()συνάρτηση. Έχουμε για intro()λειτουργία εσωτερικού βρόχου που λειτουργεί στα δεδομένα του λεξικού που έχει περάσει και εκτυπώνει την αξία του λεξικού.

Πράγματα που πρέπει να θυμάστε:

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

ενδιαφέροντα άρθρα...