Senior
Τι θα εμφανίσει κάθε print σε μια συνάρτηση με μεταβλητό προεπιλεγμένο όρισμα;
sobes.tech AI
Απάντηση από AI
Σε γλώσσες όπου οι συναρτήσεις μπορούν να έχουν προεπιλεγμένες μεταβλητές (mutable), όπως στην Python, οι προεπιλεγμένες τιμές αρχικοποιούνται μία φορά κατά τον ορισμό της συνάρτησης, όχι σε κάθε κλήση. Αυτό οδηγεί στο ότι αν η προεπιλεγμένη παράμετρος είναι ένα μεταβλητό αντικείμενο (π.χ. μια λίστα ή ένα λεξικό), οι αλλαγές σε αυτό το αντικείμενο διατηρούνται μεταξύ των κλήσεων.
Παράδειγμα στην Python:
def func(a, lst=[]):
lst.append(a)
print(lst)
func(1) # Θα εμφανίσει: [1]
func(2) # Θα εμφανίσει: [1, 2]
func(3, ['x']) # Θα εμφανίσει: ['x', 3]
func(4) # Θα εμφανίσει: [1, 2, 4]
Εξήγηση:
- Στην πρώτη κλήση
func(1), χρησιμοποιείται η προεπιλεγμένη λίστα[], στην οποία προστίθεται το1. - Στη δεύτερη κλήση
func(2), χρησιμοποιείται η ίδια λίστα, τώρα[1], και προστίθεται το2. - Στην κλήση
func(3, ['x']), περνάει μια νέα λίστα['x'], επομένως οι αλλαγές δεν επηρεάζουν την προεπιλεγμένη. - Στην τελευταία κλήση
func(4), ξανά χρησιμοποιείται η προεπιλεγμένη λίστα, η οποία τώρα περιέχει[1, 2], και προστίθεται το4.
Έτσι, κάθε print θα εμφανίζει την τρέχουσα κατάσταση του μεταβλητού προεπιλεγμένου ορίσματος, το οποίο διατηρεί τις αλλαγές μεταξύ των κλήσεων.