Ποιος είναι ο καλύτερος τρόπος για να επιστρέψει πολλαπλές τιμές από μια συνάρτηση σε Python;

ψήφοι
59

Έχω μια λειτουργία όπου θα πρέπει να κάνουμε κάτι σε μια σειρά. Χρειάζομαι τη λειτουργία για να επιστρέψει μια boolean που υποδεικνύει εάν ή όχι η λειτουργία ολοκληρώθηκε με επιτυχία, και θα πρέπει επίσης να επιστρέψει το τροποποιημένο κορδόνι.

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

Σχετικά ερώτημα: Είναι pythonic για μια λειτουργία για να επιστρέψει πολλαπλές τιμές;

Δημοσιεύθηκε 01/09/2008 στις 23:01
πηγή χρήστη
Σε άλλες γλώσσες...                            


5 απαντήσεις

ψήφοι
7

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

Απαντήθηκε 01/09/2008 στις 23:03
πηγή χρήστη

ψήφοι
15

Επιστροφή μια πλειάδα.

def f(x):
    # do stuff
    return (True, modified_string)

success, modified_string = f(something)
Απαντήθηκε 01/09/2008 στις 23:03
πηγή χρήστη

ψήφοι
118

def f(in_str):
    out_str = in_str.upper()
    return True, out_str # Creates tuple automatically

succeeded, b = f("a") # Automatic tuple unpacking
Απαντήθηκε 01/09/2008 στις 23:04
πηγή χρήστη

ψήφοι
28

Γιατί να μην ρίξει μια εξαίρεση, αν η πράξη δεν ήταν επιτυχής; Προσωπικά, έχω την τάση να είναι της γνώμης ότι αν χρειαστεί να επιστρέψει περισσότερες από μία τιμές από μια συνάρτηση, θα πρέπει να επανεξετάσει εάν κάνετε τα πράγματα με το σωστό τρόπο ή να χρησιμοποιήσετε ένα αντικείμενο.

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

Απαντήθηκε 01/09/2008 στις 23:09
πηγή χρήστη

ψήφοι
3

Ρίχνουν μια εξαίρεση για την αποτυχία είναι ένας καλός τρόπος για να προχωρήσουμε, και αν επιστρέψει πολλές διαφορετικές τιμές, μπορείτε να επιστρέψετε μια πλειάδα. Για τη συγκεκριμένη περίπτωση που είστε αναφέροντας, συχνά λαμβάνει μια ενδιάμεση προσέγγιση: να επιστρέψει το τροποποιημένο κορδόνι στην επιτυχία, και να επιστρέψει Κανένας στην αποτυχία. Είμαι αρκετά ενός αμετανόητων προγραμματιστή C να θέλει να επιστρέψει ένα δείκτη NULL σε char σε αποτυχία.

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

Απαντήθηκε 02/09/2008 στις 04:15
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more