Τι είναι μια πλειάδα χρήσιμο για;

ψήφοι
36

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

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


10 απαντήσεις

ψήφοι
45

  • Οι πλειάδες χρησιμοποιούνται κάθε φορά που θέλετε να επιστρέψετε πολλαπλά αποτελέσματα από μια συνάρτηση.
  • Δεδομένου ότι είναι αμετάβλητος, μπορούν να χρησιμοποιηθούν ως κλειδιά για ένα λεξικό (λίστες δεν μπορεί).
Απαντήθηκε 03/09/2008 στις 15:18
πηγή χρήστη

ψήφοι
2

Θα τα βρείτε χρήσιμα όταν πάντα ασχολείται με δύο ή περισσότερα αντικείμενα ως σύνολο.

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

ψήφοι
1

Μια λίστα μπορεί πάντα να αντικαταστήσει μια πλειάδα που, σε σχέση με τη λειτουργικότητα (εκτός, προφανώς, ως πλήκτρα σε κάθε dict). Ωστόσο, μια πλειάδα μπορεί να κάνει τα πράγματα πάνε πιο γρήγορα. Το ίδιο ισχύει και για, για παράδειγμα, αμετάβλητος χορδές σε Java - όταν θα χρειαστεί ποτέ να είναι σε θέση να αλλάξει χορδές σας; Ποτέ!

Μόλις διάβασα μια αξιοπρεπή συζήτηση για τον περιορισμό ό, τι μπορείτε να κάνετε για να γίνει καλύτερη προγράμματα? Γιατί Γιατί Λειτουργική Προγραμματισμός Θέματα Θέματα

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

ψήφοι
18

Πλειάδες κάνει καλό κλειδιά λεξικό όταν πρέπει να συνδυάσετε περισσότερα από ένα κομμάτι των δεδομένων στο κλειδί σας και δεν αισθάνονται σαν να κάνει μια τάξη γι 'αυτό.

a = {}
a[(1,2,"bob")] = "hello!"
a[("Hello","en-US")] = "Hi There!"

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

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

ψήφοι
1

Μια πλειάδα είναι χρήσιμη για την αποθήκευση πολλαπλές τιμές .. Όπως μπορείτε να σημειώσετε μια πλειάδα είναι ακριβώς όπως μια λίστα που είναι αμετάβλητος - π.χ. μία φορά δημιουργήθηκε δεν μπορείτε να προσθέσετε / αφαιρέσετε στοιχεία / swap.

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

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

ψήφοι
2

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

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

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

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

ψήφοι
8

Μου αρέσει αυτή την εξήγηση .

Βασικά, θα πρέπει να χρησιμοποιήσετε πλειάδες, όταν υπάρχει μια σταθερή δομή (η 1η θέση κατέχει πάντα ένα είδος αξίας και η δεύτερη ένα άλλο, και ούτω καθεξής), και οι κατάλογοι θα πρέπει να χρησιμοποιείται για τους καταλόγους των ομογενών τιμές.

Φυσικά υπάρχει πάντα εξαιρέσεις, αλλά αυτό είναι μια καλή γενική κατευθυντήρια γραμμή.

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

ψήφοι
0

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

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

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

ψήφοι
0

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

Μια πλειάδα είναι μια λίστα διαχωρισμένη με κόμματα των τιμών:

t = 'p', 'q', 'r', 's', 't'

είναι καλή πρακτική να επισυνάψουν πλειάδες σε παρένθεση:

t = ('p', 'q', 'r', 's', 't') 
Απαντήθηκε 22/09/2016 στις 10:54
πηγή χρήστη

ψήφοι
2

Ο καλύτερος τρόπος για να το σκεφτώ είναι:

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

Έτσι, αντί της γραφής τα πράγματα όπως:

person = {"name": "Sam", "age": 42}
name, age = person["name"], person["age"]

Ή το ακόμα πιο φλύαρη:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

person = Person("Sam", 42)
name, age = person.name, person.age

Μπορείτε απλά να γράψετε:

person = ("Sam", 42)
name, age = person

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

Πλειάδες προέρχονται από τον κόσμο του λειτουργικού προγραμματισμού (Haskell, OCaml, Elm, F #, κλπ), όπου χρησιμοποιούνται συνήθως για το σκοπό αυτό. Σε αντίθεση με Python, πιο λειτουργική γλώσσα προγραμματισμού στατικούς τύπους (μια μεταβλητή μπορεί να κρατήσει μόνο ένα είδος αξίας, και ότι ο τύπος καθορίζεται κατά τη μεταγλώττιση). Στατική δακτυλογράφησης κάνει ο ρόλος των πλειάδων πιο εμφανής. Για παράδειγμα, στη γλώσσα Elm:

type Person = (String, Int)

person : Person
person = ("Sam", 42)

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

Το παραπάνω είναι σε πλήρη αντίθεση με τους καταλόγους , οι οποίοι υποτίθεται ότι είναι μεταβλητού μήκους (ο αριθμός των ειδών είναι συνήθως διαφορετικές σε κάθε λίστα και να γράψετε τις λειτουργίες για να προσθέσετε και να καταργήσετε στοιχεία) και κάθε στοιχείο της λίστας είναι συνήθως του ίδιου τύπου . Για παράδειγμα, θα είχατε μια λίστα των ανθρώπων και μια άλλη λίστα διευθύνσεων - δεν θα αναμειγνύεται τους ανθρώπους και τις διευθύνσεις στην ίδια λίστα. Εκτιμώντας την ανάμειξη διαφόρων τύπων δεδομένων μέσα στο ίδιο πλειάδα είναι το νόημα των πλειάδων. Τα πεδία σε μια πλειάδα είναι συνήθως διαφορετικών τύπων (αλλά όχι πάντα - για παράδειγμα θα μπορούσε να έχει μια (Float, Float, Float)πλειάδα να εκπροσωπεί x, y, z συντεταγμένες).

Πλειάδες και λίστες συχνά ένθετα. Είναι κοινό να έχει μια λίστα από πλειάδες. Θα μπορούσατε να έχετε μια λίστα με Πρόσωπο πλειάδες μόνο, καθώς και μια λίστα με πρόσωπο αντικειμένων. Μπορείτε επίσης να έχετε ένα πεδίο πλειάδα των οποίων η αξία είναι μια λίστα. Για παράδειγμα, αν έχετε ένα βιβλίο διευθύνσεων, όπου ένα άτομο μπορεί να έχει πολλές διευθύνσεις, θα μπορούσατε να έχετε μια πλειάδα τύπου (Person, [String]). Ο [String]τύπος χρησιμοποιείται συνήθως σε λειτουργική γλώσσα προγραμματισμού για να υποδηλώσει μια λίστα των χορδών. Στην Python, δεν θα γράψετε τον τύπο, αλλά μπορείτε να χρησιμοποιήσετε πλειάδες όπως αυτό με τον ίδιο ακριβώς τρόπο, βάζοντας ένα Personαντικείμενο στο πρώτο πεδίο μιας πλειάδας και έναν κατάλογο των χορδών στο δεύτερο πεδίο.

Στην Python, σύγχυση προκύπτει επειδή η γλώσσα δεν επιβάλλει καμία από αυτές τις πρακτικές που επιβάλλονται από τον compiler σε στατικούς τύπους λειτουργικές γλώσσες. Σε αυτές τις γλώσσες, δεν μπορείτε να αναμίξετε διαφορετικά είδη πλειάδες. Για παράδειγμα, δεν μπορείτε να επιστρέψετε μια (String, String)πλειάδα από μια συνάρτηση των οποίων ο τύπος λέει ότι επιστρέφει μια (String, Integer)πλειάδα. Μπορείτε, επίσης, δεν μπορεί να επιστρέψει μια λίστα, όταν ο τύπος λέει ότι σκοπεύετε να επιστρέψει μια πλειάδα, και το αντίστροφο. Οι λίστες που χρησιμοποιούνται αποκλειστικά για την καλλιέργεια συλλογές αντικειμένων, και πλειάδες αυστηρά για εγγραφές σταθερού μεγέθους. Python δεν σας σταματήσουν από το σπάσιμο των κανόνων αυτών, αν θέλετε να.

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

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

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

Τέλος, για να γίνει ακόμα πιο φανερό ότι οι πλειάδες που προορίζεται να είναι ένα άλλο είδος της ρεκόρ (όχι ένα άλλο είδος της λίστας), Python, επίσης, έχει το όνομα πλειάδες :

from collections import namedtuple

Person = namedtuple("Person", "name age")

person = Person("Sam", 42)
name, age = person.name, person.age

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

Αμετάβλητος κατάλογοι είναι πολύ χρήσιμο για πολλούς λόγους , αλλά το θέμα είναι πολύ περίπλοκο για να απαντήσετε εδώ. Το βασικό σημείο είναι ότι τα πράγματα που δεν μπορούν να αλλάξουν είναι πιο εύκολο να τον λόγο για ό, τι τα πράγματα που μπορούν να αλλάξουν. Τα περισσότερα σφάλματα λογισμικού προέρχονται από τα πράγματα αλλάζουν με απροσδόκητους τρόπους, έτσι περιορίζει τους τρόπους με τους οποίους μπορεί να αλλάξει είναι ένας καλός τρόπος για την εξάλειψη των bugs. Αν σας ενδιαφέρει, σας συνιστώ να διαβάσετε ένα σεμινάριο για μια λειτουργική γλώσσα προγραμματισμού όπως η Elm, Haskell ή Clojure (Elm είναι το πιο φιλικό). Οι σχεδιαστές αυτών των γλωσσών θεωρείται αμετάβλητο τόσο χρήσιμη ώστε όλοι οι κατάλογοι είναι αμετάβλητος εκεί. (Αντί να αλλάζει μια λίστα για να προσθέσετε ή να καταργήσετε ένα στοιχείο, που κάνει μια νέα λίστα με το στοιχείο που προστίθεται ή αφαιρείται . Αμετάβλητο εγγυάται ότι το παλαιό αντίγραφο της λίστας δεν μπορεί να αλλάξει, έτσι ώστε ο compiler και runtime μπορούν να κάνουν τον κωδικό καλές επιδόσεις με την επαναχρησιμοποίηση τμημάτων του παλαιού καταλόγου στο νέο και σκουπίδια-συλλογή των αριστερά προς τα μέρη όταν χρειάζονται πλέον.)

Απαντήθηκε 25/09/2018 στις 13:45
πηγή χρήστη

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