Στο Python, μπορείτε να ορίσετε μια συνάρτηση που λαμβάνει μεταβλητό αριθμό ορισμάτων. Σε αυτό το άρθρο, θα μάθετε να ορίζετε τέτοιες συναρτήσεις χρησιμοποιώντας προεπιλεγμένα, λέξεις-κλειδιά και αυθαίρετα ορίσματα.
Βίντεο: Επιχειρήματα Λειτουργίας Python: Θέση, Λέξεις-κλειδιά και Προεπιλογή
Επιχειρήματα
Στο θέμα λειτουργίας που καθορίζεται από το χρήστη, μάθαμε για τον ορισμό μιας συνάρτησης και την κλήση της. Διαφορετικά, η κλήση λειτουργίας θα οδηγήσει σε σφάλμα. Εδώ είναι ένα παράδειγμα.
def greet(name, msg): """This function greets to the person with the provided message""" print("Hello", name + ', ' + msg) greet("Monica", "Good morning!")
Παραγωγή
Γεια Μόνικα, καλημέρα!
Εδώ, η συνάρτηση greet()
έχει δύο παραμέτρους.
Δεδομένου ότι έχουμε ονομάσει αυτήν τη συνάρτηση με δύο ορίσματα, λειτουργεί ομαλά και δεν έχουμε κανένα σφάλμα.
Εάν το καλέσουμε με διαφορετικό αριθμό ορισμάτων, ο διερμηνέας θα εμφανίσει ένα μήνυμα σφάλματος. Ακολουθεί μια κλήση σε αυτήν τη συνάρτηση με ένα και χωρίς ορίσματα μαζί με τα αντίστοιχα μηνύματα σφάλματος.
>>> χαιρετισμός ("Monica") # μόνο ένα όρισμα TypeError: Salam () λείπει 1 απαιτούμενο όρισμα θέσης: 'msg'
>>> χαιρετισμός () # κανένα επιχείρημα TypeError: χαιρετισμός () λείπουν 2 απαιτούμενα ορίσματα θέσης: 'name' και 'msg'
Επιχειρήματα μεταβλητής συνάρτησης
Μέχρι τώρα, οι συναρτήσεις είχαν έναν σταθερό αριθμό ορισμάτων. Στο Python, υπάρχουν και άλλοι τρόποι για να ορίσετε μια συνάρτηση που μπορεί να λάβει μεταβλητό αριθμό ορισμάτων.
Παρακάτω περιγράφονται τρεις διαφορετικές μορφές αυτού του τύπου.
Προεπιλεγμένα επιχειρήματα της Python
Τα ορίσματα συνάρτησης μπορούν να έχουν προεπιλεγμένες τιμές στο Python.
Μπορούμε να παρέχουμε μια προεπιλεγμένη τιμή σε ένα όρισμα χρησιμοποιώντας τον τελεστή ανάθεσης (=). Εδώ είναι ένα παράδειγμα.
def greet(name, msg="Good morning!"): """ This function greets to the person with the provided message. If the message is not provided, it defaults to "Good morning!" """ print("Hello", name + ', ' + msg) greet("Kate") greet("Bruce", "How do you do?")
Παραγωγή
Γεια σας Kate, καλημέρα! Γεια σου Μπρους, πώς το κάνεις;
Σε αυτήν τη λειτουργία, η παράμετρος name
δεν έχει προεπιλεγμένη τιμή και απαιτείται (υποχρεωτική) κατά τη διάρκεια μιας κλήσης.
Από την άλλη πλευρά, η παράμετρος msg
έχει μια προεπιλεγμένη τιμή "Good morning!"
. Επομένως, είναι προαιρετικό κατά τη διάρκεια μιας κλήσης. Εάν παρέχεται μια τιμή, θα αντικαταστήσει την προεπιλεγμένη τιμή.
Οποιοσδήποτε αριθμός ορισμάτων σε μια συνάρτηση μπορεί να έχει μια προεπιλεγμένη τιμή. Αλλά όταν έχουμε ένα προεπιλεγμένο όρισμα, όλα τα επιχειρήματα στα δεξιά του πρέπει επίσης να έχουν προεπιλεγμένες τιμές.
Αυτό σημαίνει ότι τα μη προεπιλεγμένα ορίσματα δεν μπορούν να ακολουθήσουν τα προεπιλεγμένα ορίσματα. Για παράδειγμα, εάν είχαμε ορίσει την κεφαλίδα της συνάρτησης παραπάνω ως:
def salam (msg = "Καλημέρα!", όνομα):
Θα λάβαμε ένα σφάλμα ως:
SyntaxError: το μη προεπιλεγμένο όρισμα ακολουθεί το προεπιλεγμένο όρισμα
Επιχειρήματα λέξεων-κλειδιών Python
Όταν καλούμε μια συνάρτηση με ορισμένες τιμές, αυτές οι τιμές αντιστοιχίζονται στα ορίσματα ανάλογα με τη θέση τους.
Για παράδειγμα, στην παραπάνω συνάρτηση greet()
, όταν το ονομάσαμε ως greet("Bruce", "How do you do?")
, η τιμή "Bruce"
αντιστοιχεί στο όνομα του ορίσματος και παρόμοια "How do you do?"
με το msg.
Το Python επιτρέπει την κλήση συναρτήσεων χρησιμοποιώντας ορίσματα λέξεων-κλειδιών. Όταν καλούμε συναρτήσεις με αυτόν τον τρόπο, η σειρά (θέση) των ορισμάτων μπορεί να αλλάξει. Οι ακόλουθες κλήσεις προς την παραπάνω λειτουργία είναι όλες έγκυρες και παράγουν το ίδιο αποτέλεσμα.
# 2 keyword arguments greet(name = "Bruce",msg = "How do you do?") # 2 keyword arguments (out of order) greet(msg = "How do you do?",name = "Bruce") 1 positional, 1 keyword argument greet("Bruce", msg = "How do you do?")
Όπως μπορούμε να δούμε, μπορούμε να συνδυάσουμε ορίσματα θέσης με ορίσματα λέξεων-κλειδιών κατά τη διάρκεια μιας κλήσης συνάρτησης. Αλλά πρέπει να έχουμε κατά νου ότι τα επιχειρήματα λέξεων-κλειδιών πρέπει να ακολουθούν τα επιχειρήματα θέσης.
Έχοντας ένα όρισμα θέσης μετά από ορίσματα λέξεων-κλειδιών θα οδηγήσει σε σφάλματα. Για παράδειγμα, η συνάρτηση καλεί ως εξής:
greet(name="Bruce","How do you do?")
Θα οδηγήσει σε σφάλμα:
SyntaxError: arg χωρίς λέξεις-κλειδιά μετά arg
Αυθαίρετα επιχειρήματα Python
Μερικές φορές, δεν γνωρίζουμε εκ των προτέρων τον αριθμό των ορισμάτων που θα μεταφερθούν σε μια συνάρτηση. Η Python μας επιτρέπει να χειριστούμε τέτοιου είδους καταστάσεις μέσω κλήσεων λειτουργίας με αυθαίρετο αριθμό ορισμάτων.
Στον ορισμό της συνάρτησης, χρησιμοποιούμε έναν αστερίσκο (*) πριν από το όνομα της παραμέτρου για να υποδηλώσουμε αυτό το είδος ορίσματος. Εδώ είναι ένα παράδειγμα.
def greet(*names): """This function greets all the person in the names tuple.""" # names is a tuple with arguments for name in names: print("Hello", name) greet("Monica", "Luke", "Steve", "John")
Παραγωγή
Γεια σας Μόνικα Γεια σας Λουκά Γεια σας Steve Γεια Τζον
Εδώ, ονομάσαμε τη συνάρτηση με πολλά ορίσματα. Αυτά τα επιχειρήματα τυλίγονται σε μια πλειάδα πριν περάσουν στη συνάρτηση Μέσα στη συνάρτηση, χρησιμοποιούμε έναν for
βρόχο για να ανακτήσουμε όλα τα ορίσματα.