Η υπερφόρτωση συναρτήσεων μπορεί να μην είναι ενσωματωμένη στην Python, αλλά υπάρχουν τρόποι μίμησής της.

Η υπερφόρτωση συναρτήσεων είναι μια δυνατότητα σε ορισμένες γλώσσες προγραμματισμού που σας επιτρέπει να ορίσετε παραλλαγές της ίδιας συνάρτησης. Κάθε παραλλαγή έχει το ίδιο όνομα, αλλά διαφορετικές υλοποιήσεις, με μοναδικές υπογραφές συναρτήσεων.

Αυτή η τεχνική σάς επιτρέπει να εκτελείτε διαφορετικές λειτουργίες με βάση τον τύπο και τον αριθμό των ορισμάτων που διαβιβάζονται σε μια συνάρτηση.

Σε αντίθεση με γλώσσες όπως η C++ και η Java, η Python δεν υποστηρίζει την υπερφόρτωση συναρτήσεων από προεπιλογή, αλλά υπάρχουν τρόποι για την επίτευξη παρόμοιας λειτουργικότητας.

Πώς χειρίζεται η Python την υπερφόρτωση της λειτουργίας;

Στην Python, μπορείτε να ορίσετε την ίδια συνάρτηση περισσότερες από μία φορές με διαφορετικές παραμέτρους, τύπους δεδομένων ή και τα δύο σε κάθε ορισμό. Ωστόσο, η Python θα αναγνωρίσει μόνο τον τελευταίο ορισμό της συνάρτησης όταν την καλέσετε. Εδώ είναι ένα παράδειγμα:

instagram viewer
defarithmetics(a, b):
return a - b

defarithmetics(a, b, c, d):
return a + b - c * d

print(arithmetics(1, 2, 3, 5)) # returns -12
print(arithmetics(1, 2)) # returns missing positional arguments error

Οι αντικειμενοστρεφείς γλώσσες, όπως η Java, συχνά υποστηρίζουν υπερφόρτωση συναρτήσεων και μεθόδων. Μια μέθοδος είναι απλώς μια συνάρτηση που ορίζετε μέσα σε μια κλάση.

Στον παραπάνω κώδικα, η Python θα αναγνωρίσει μόνο τον δεύτερο ορισμό του αριθμητική () λειτουργία όταν προσπαθείτε να το καλέσετε στο έργο σας. Εάν προσπαθήσετε να καλέσετε τη συνάρτηση με δύο ορίσματα όπως ορίστηκαν αρχικά, θα λάβετε ένα σφάλμα που λέει, "Λείπουν τα απαιτούμενα ορίσματα θέσης".

Δεν θα λάβετε σφάλμα όταν καλείτε τη συνάρτηση με τέσσερα ορίσματα. Αυτό σημαίνει ότι η Python έχει αντικαταστήσει τη συνάρτηση με την τελευταία της παρουσία. Αυτή δεν είναι η συμπεριφορά της υπερφόρτωσης, επομένως πρέπει να την αντιμετωπίσετε.

Έτσι, η Python δεν χειρίζεται την υπερφόρτωση συναρτήσεων από προεπιλογή, αλλά υπάρχουν μερικά κόλπα που μπορείτε να χρησιμοποιήσετε για να προσομοιώσετε τη συμπεριφορά της στα προγράμματά σας.

Μέθοδος 1: Χρήση προαιρετικών παραμέτρων ή προεπιλεγμένων ορισμάτων

Μπορείτε να επιτύχετε υπερφόρτωση ορίζοντας μια συνάρτηση με προεπιλεγμένα ορίσματα. Εδώ είναι ένα παράδειγμα:

defarithmetics(a, b=0, c=0):

Arguments:
a: The first number.
b: The second number (optional).
c: The third number (optional).

return a - b + c

Αυτή η συνάρτηση έχει τρεις παραμέτρους, αλλά δύο από αυτές έχουν προεπιλεγμένες τιμές. Αυτό σημαίνει ότι μπορείτε να το καλέσετε με ένα έως τρία ορίσματα:

print(arithmetics(1)) # returns 1
print(arithmetics(2, 5)) # returns -3
print(arithmetics(10, 3, 4)) # returns 11

Αν και αυτή η προσέγγιση σας επιτρέπει να καλέσετε τη συνάρτηση με πολλούς διαφορετικούς τρόπους, δεν είναι πολύ αποτελεσματική μακροπρόθεσμα. Εδώ είναι μερικοί από τους περιορισμούς του:

  • Μπορείτε να μεταβιβάσετε μόνο ορίσματα που είναι είτε ακέραιοι είτε αιωρούμενοι.
  • Δεν υπάρχει σημαντική αλλαγή στη συμπεριφορά της συνάρτησης. Για παράδειγμα, δεν μπορείτε να αλλάξετε τη συμπεριφορά του για να υπολογίσετε την περιοχή ενός σχήματος ή ακόμα και να εκτυπώσετε Γειά σου Κόσμε.

Μέθοδος 2: Χρήση μεταβλητών ορισμών

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

defarithmetics(a, *args):

Arguments:
a: The first number.
*args: A variable number of arguments (optional).

args_sum = 0

for num in args:
args_sum *= num

return a - args_sum

print(arithmetics(1)) # returns 1
print(arithmetics(2, 5)) # returns 2
print(arithmetics(10, 3, 4, 2, 4, 6)) # returns 10

Η παραπάνω συνάρτηση παίρνει δύο ορίσματα: ένα υποχρεωτικό όρισμα που ονομάζεται ένα και το args όρισμα, το οποίο σας επιτρέπει να εισάγετε όσα ορίσματα χρειάζεστε.

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

Εάν θέλετε να εκτελέσετε πολλαπλές λειτουργίες, πρέπει να το κάνετε εισάγετε δηλώσεις υπό όρους στον κώδικά σας, και αυτό μπορεί γρήγορα να γίνει πολύπλοκο.

Μέθοδος 3: Χρήση του διακοσμητή πολλαπλής αποστολής

Ο διακοσμητής πολλαπλών αποστολών είναι μια βιβλιοθήκη Python που σας επιτρέπει να ορίσετε πολλαπλές υλοποιήσεις ή παρουσίες μιας μεμονωμένης συνάρτησης, με βάση τον τύπο των ορισμάτων της. Αυτό σημαίνει ότι μπορείτε να ορίσετε την ίδια συνάρτηση με διαφορετικούς τύπους δεδομένων και να αλλάξετε εντελώς τη συμπεριφορά της.

Για να χρησιμοποιήσετε το διακοσμητή πολλαπλών αποστολών, ακολουθήστε τα εξής βήματα:

  1. Εγκαθιστώ πολλαπλή διασπορά στο περιβάλλον Python σας:
    pip install multipledispatch
  2. Διακοσμήστε τις λειτουργίες σας με το @επιστολή διακοσμητής. ο @επιστολή διακοσμητής είναι α Διακοσμητής Python που σας επιτρέπει να εφαρμόσετε πολλαπλές αποστολές. Θα αποστείλει αυτόματα την κατάλληλη συνάρτηση με βάση τα ορίσματα που μεταβιβάζετε σε αυτήν. Μπορείτε να χρησιμοποιήσετε το @επιστολή διακοσμητής ακολουθώντας αυτό το μοτίβο:
    from multipledispatch import dispatch

    @dispatch(data type1, data type2, data typeX)
    defyour_function(a, b, c, x):
    pass
    # perform your operations here

Ακολουθεί ένα παράδειγμα που χρησιμοποιεί τον διακοσμητή πολλαπλών αποστολών για υπερφόρτωση συναρτήσεων στην Python:

from multipledispatch import dispatch

@dispatch(int, int)
defadd(a, b):

Arguments:
a: Any integer.
b: Any integer.

return a + b

@dispatch(int, list)
defadd(a, b):

Arguments:
a: Any integer.
b: Any Python list.

b.append(a)
return b

# returns 3
print(add(1, 2))

# returns [2, 3, 4, 5, 'w', 'done', 1]
print(add(1, [2, 3, 4, 5, 'w', 'done']))

Το παραπάνω απόσπασμα κώδικα ορίζει δύο περιπτώσεις του Προσθήκη() λειτουργία. Η πρώτη περίπτωση παίρνει δύο ακέραιους αριθμούς ως ορίσματα και επιστρέφει το άθροισμά τους.

Εν τω μεταξύ, η δεύτερη έκδοση αυτής της συνάρτησης παίρνει έναν ακέραιο και μια λίστα. Προσθέτει τον ακέραιο στη λίστα και επιστρέφει τη νέα λίστα.

Αυτή η προσέγγιση για την υπερφόρτωση συναρτήσεων στην Python σας δίνει μεγάλη ευελιξία, ειδικά εάν πρέπει να αλλάξετε τη συμπεριφορά της μεθόδου σας. Μπορείτε να μάθετε περισσότερα από το πολλαπλή τεκμηρίωση αποστολής.

Η καλύτερη προσέγγιση προς την υπερφόρτωση συναρτήσεων στην Python

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

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

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