Sobes.tech
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 θα εμφανίζει την τρέχουσα κατάσταση του μεταβλητού προεπιλεγμένου ορίσματος, το οποίο διατηρεί τις αλλαγές μεταξύ των κλήσεων.