Ο ορισμός ενός προεπιλεγμένου ορίσματος σε έναν ορισμό συνάρτησης της Python προκαλεί τη χρήση της προεπιλεγμένης τιμής εάν το όρισμα παραλειφθεί κατά τη διάρκεια μιας κλήσης συνάρτησης.
Οι ακόλουθες λεπτομέρειες περιγράφονται παρακάτω.
- Ορισμός προεπιλεγμένων επιχειρημάτων
- Περιορισμοί στη θέση των προεπιλεγμένων ορίων
- Σημειώστε ότι όταν μια λίστα ή ένα λεξικό χρησιμοποιείται ως προεπιλεγμένη τιμή
Ορισμός προεπιλεγμένων επιχειρημάτων
Εάν το όνομα όρου = προεπιλεγμένη τιμή στον ορισμό της συνάρτησης, η προεπιλεγμένη τιμή θα χρησιμοποιείται όταν το αντίστοιχο όρισμα παραλείπεται.
def func_default(arg1, arg2='default_x', arg3='default_y'): print(arg1) print(arg2) print(arg3) func_default('a') # a # default_x # default_y func_default('a', 'b') # a # b # default_y func_default('a', arg3='c') # a # default_x # c
Περιορισμοί στη θέση των προεπιλεγμένων ορίων
Η τοποθέτηση ενός προεπιλεγμένου ορίσματος πριν από ένα κανονικό όρισμα (ένα όρισμα για το οποίο δεν έχει καθοριστεί προεπιλεγμένη τιμή) κατά τον ορισμό μιας συνάρτησης οδηγεί σε σφάλμα.SyntaxError
# def func_default_error(arg2='default_a', arg3='default_b', arg1): # print(arg1) # print(arg2) # SyntaxError: non-default argument follows default argument
Σημειώστε ότι όταν μια λίστα ή ένα λεξικό χρησιμοποιείται ως προεπιλεγμένη τιμή
Εάν ως προεπιλεγμένη τιμή ορίζεται ένα αντικείμενο με δυνατότητα ενημέρωσης (μεταβλητό), όπως μια λίστα ή ένα λεξικό, το αντικείμενο αυτό θα δημιουργηθεί κατά τον ορισμό της συνάρτησης. Στη συνέχεια, όταν η συνάρτηση καλείται χωρίς το αντίστοιχο όρισμα, χρησιμοποιείται το ίδιο αντικείμενο.
Οι προεπιλεγμένες τιμές των επιχειρημάτων αξιολογούνται από αριστερά προς τα δεξιά κατά την εκτέλεση του ορισμού της συνάρτησης. Αυτό σημαίνει ότι η έκφραση του προεπιλεγμένου ορίσματος αξιολογείται μόνο μία φορά κατά τον ορισμό της συνάρτησης και η ίδια «υπολογισμένη» τιμή χρησιμοποιείται για κάθε κλήση.
8.7. Function definitions — Python 3.10.2 Documentation
Έτσι, για παράδειγμα, αν οριστεί μια συνάρτηση που δέχεται ως προεπιλεγμένο όρισμα μια λίστα ή ένα λεξικό και προσθέτει στοιχεία σε αυτό και κληθεί πολλές φορές χωρίς αυτό το όρισμα, τα στοιχεία θα προστεθούν επανειλημμένα στο ίδιο αντικείμενο.
Παράδειγμα για μια καταχώριση.
def func_default_list(l=[0, 1, 2], v=3): l.append(v) print(l) func_default_list([0, 0, 0], 100) # [0, 0, 0, 100] func_default_list() # [0, 1, 2, 3] func_default_list() # [0, 1, 2, 3, 3] func_default_list() # [0, 1, 2, 3, 3, 3]
Παράδειγμα για ένα λεξικό.
def func_default_dict(d={'default': 0}, k='new', v=100): d[k] = v print(d) func_default_dict() # {'default': 0, 'new': 100} func_default_dict(k='new2', v=200) # {'default': 0, 'new': 100, 'new2': 200}
Ένα νέο αντικείμενο δημιουργείται κάθε φορά που καλείται η συνάρτηση.
def func_default_list_none(l=None, v=3): if l is None: l = [0, 1, 2] l.append(v) print(l) func_default_list_none() # [0, 1, 2, 3] func_default_list_none() # [0, 1, 2, 3]