Τύποι Built-in

Οι παρακάτω κατηγορίες περιγράφουν τους standard τύπους που είναι ενσωματωμένοι (built) μέσα στον interpreter.

Οι κύριοι ενσωματωμένοι (built) τύποι είναι αριθμοί, ακολουθίες, αντιστοιχίσεις (mappings), κλάσεις, instances και exceptions.

Ορισμένες collection κλάσεις είναι μεταβλητές (mutable). Οι μέθοδοι που προσθέτουν, αφαιρούν ή αναδιατάσσουν τα μέλη τους και δεν επιστρέφουν ένα συγκεκριμένο αντικείμενο, ποτέ δεν επιστρέφουν το ίδιο collection instance αλλάNone.

Ορισμένες λειτουργίες υποστηρίζονται από διάφορους τύπους αντικειμένων· ειδικότερα, σχεδόν όλα τα αντικείμενα μπορούν να συγκριθούν ως προς την ισότητα, να ελεγχθούν για την έγκυρη τιμή και να μετατραπούν σε συμβολοσειρά (string) (με τη συνάρτησηrepr() ή την ελαφρώς διαφορετική συνάρτησηstr()). Η τελευταία συνάρτηση χρησιμοποιείται έμμεσα όταν ένα αντικείμενο γράφεται από τη συνάρτησηprint().

Έλεγχος Έγκυρης Τιμής

Οποιοδήποτε αντικείμενο μπορεί να ελεγχθεί ως προς την εγκυρότητα της τιμής του, για χρήση σεif ήwhile συνθήκη ή ως τελεστής των λογικών πράξεων παρακάτω.

Ως προεπιλογή, ένα αντικείμενο θεωρείται true εκτός εάν η κλάση του ορίζει μία__bool__() μέθοδο που επιστρέφειFalse ή μία__len__() μέθοδο που επιστρέφει μηδέν, όταν καλείται με το αντικείμενο.[1] Εδώ τα περισσότερα από τα ενσωματωμένα (built-in) αντικείμενα θεωρούνται false:

  • σταθερές που έχουν οριστεί ως false:None καιFalse

  • μηδέν οποιουδήποτε αριθμητικού τύπου:0,0,0,0j,Decimanl(0),Fraction(0,1)

  • κενές ακολουθίες και collections:'',(),[],{},set(),range(0)

Οι πράξεις και οι ενσωματωμένες (built-in) συναρτήσεις που έχουν αποτέλεσμα Boolean πάντα επιστρέφουν0 ήFalse για false και1 ήTrue για true, εκτός εάν δηλώνεται διαφορετικά. (Σημαντική εξαίρεση: οι λογικές (Boolean) πράξειςor καιand επιστρέφουν πάντα έναν από τους τελεστές τους.)

Λογικές (Boolean) Πράξεις —and,or,not

Αυτές είναι οι λογικές (Boolean) πράξεις, ταξινομημένες βάσει προτεραιότητας:

Πράξη

Αποτέλεσμα

Σημειώσεις

xory

αν τοx είναι true, τότεx, αλλιώςy

(1)

xandy

αν τοx είναι false, τότεx, αλλιώςy

(2)

notx

ifx είναι false, τότεTrue, αλλιώςFalse

(3)

Σημειώσεις:

  1. Αυτός είναι ένας τελεστής μικρού κυκλώματος, επομένως αξιολογεί μόνο το δεύτερο όρισμα αν το πρώτο είναι false.

  2. Αυτός είναι ένας τελεστής μικρού κυκλώματος, επομένως αξιολογεί μόνο το δεύτερο όρισμα αν το πρώτο είναι true.

  3. Tonot έχει χαμηλότερη προτεραιότητα από τους μη λογικούς (non-Boolean) τελεστές, οπότε τοnota==b μεταφράζεται σανnot(a==b), και τοa==notb είναι συντακτικό σφάλμα.

Συγκρίσεις

Υπάρχουν οκτώ πράξεις σύγκρισης στην Python. Όλες έχουν την ίδια προτεραιότητα (η οποία είναι υψηλότερη από αυτή των λογικών (Boolean) πράξεων). Οι συγκρίσεις μπορεί να αλυσοδεθούν αυθαίρετα· για παράδειγμα, τοx<y<=z ισοδυναμεί μεx<yκαιy<=z, εκτός από το ότι τοy αξιολογείται μόνο μία φορά (αλλά και στις δύο περιπτώσεις τοz δεν αξιολογείται καθόλου όταν τοx<y είναι false).

Αυτός ο πίνακας συνοψίζει τις πράξεις σύγκρισης:

Πράξη

Έννοια

<

αυστηρά μικρότερο από

<=

μικρότερο από ή ίσο

>

αυστηρά μεγαλύτερο από

>=

μεγαλύτερο από ή ίσο

==

ίσο

!=

διάφορο

is

ταυτότητα αντικειμένου

isnot

αρνητική ταυτότητα αντικειμένου

Αντικείμενα διαφορετικών τύπων, εκτός από διαφορετικούς αριθμητικούς τύπους, δεν συγκρίνονται ποτέ ως ίσα. Ο τελεστής== ορίζεται πάντα αλλά για ορισμένους τύπους αντικειμένων (για παράδειγμα, αντικείμενα κλάσης) ισοδυναμεί μεis. Οι τελεστές<,<=,> και>= ορίζονται μόνο όπου έχουν νόημα· για παράδειγμα, δημιουργούν μια εξαίρεσηTypeError όταν ένα από τα ορίσματα είναι μιγαδικός αριθμός.

Μη πανομοιότυπα instances μιας κλάσης συνήθως συγκρίνονται ως μη ίσα εκτός εάν το η κλάση ορίζει τη μέθοδο__eq__().

Τα instances μιας κλάσης δεν μπορούν να ταξινομηθούν σε σχέση με άλλα instances της ίδιας κλάσης, ή άλλους τύπους του αντικειμένου, εκτός εάν η κλάση ορίζει αρκετές από τις μεθόδους__lt__(),__le__(),__gt__(), και__ge__() (γενικά,__lt__() και__eq__() είναι αρκετά, αν θέλετε τις συμβατικές έννοιες των τελεστών σύγκρισης).

Η συμπεριφορά των τελεστώνis καιisnot δεν μπορεί να είναι προσαρμοσμένη· επίσης, μπορούν να εφαρμοστούν σε οποιαδήποτε δύο αντικείμενα και ποτέ να μην δημιουργήσουν μία εξαίρεση.

Δύο ακόμη πράξεις με την ίδια συντακτική προτεραιότητα,in καιnotin, υποστηρίζονται από τύπους που είναιIterable ή υλοποιούν τη μέθοδο__contains__().

Αριμθητικοί Τύποι —int,float,complex

Υπάρχουν τρεις διαφορετικοί αριθμητικοί τύποι:integers,floating point numbers καιcomplex numbers. Επιπλέον, τα Booleans είναι υπό-τύπος ακεραίων (integers). Οι ακέραιοι αριθμοί έχουν απεριόριστη ακρίβεια. Οι Αριθμοί κινητής υποδιαστολής (floating point numbers) συνήθως υλοποιούνται χρησιμοποιώντας τοdouble στη C· πληροφορίες σχετικά με την ακρίβεια και την εσωτερική αναπαράσταση αριθμών κινητής υποδιαστολής για το μηχάνημα στο οποίο εκτελείται το πρόγραμμά σας είναι διαθέσιμο στοsys.float_info. Οι μιγαδικοί αριθμοί (complex numbers) έχουν ένα πραγματικό και φανταστικό μέρος, κάθε ένα από τα οποία ένας αριθμός κινητής υποδιαστολής. Για να εξαγάγετε αυτά τα μέρη από έναν μιγαδικό αριθμόz, χρησιμοποιήστεz.real καιz.imag. (Η standard βιβλιοθήκη περιλαμβάνει τους πρόσθετους αριθμητικούς τύπουςfractions.Fraction, για ορθολογικούς, καιdecimal.Decimal, για αριθμούς κινητής υποδιαστολής με ακρίβεια που ορίζει ο χρήστης.)

Οι αριθμοί δημιουργούνται με αριθμητικά γράμματα ή ως αποτέλεσμα ενσωματωμένων (built-in) συναρτήσεων και τελεστών. Ακέραιοι αριθμοί (συμπεριλαμβανομένων του εξαδικού, του οκταδικού και των δυαδικοί αριθμών) αποδίδουν ακέραιους αριθμούς. Αριθμητικά που περιέχουν δεκαδικό ή εκθέτη παράγουν αριθμούς κινητής υποδιαστολής. Η προσάρτηση του'j' ή του'J' σε ένα αριθμητικό παράγει έναν φανταστικό αριθμό (έναν μιγαδικό αριθμό με μηδενικό πραγματικό μέρος) το οποίο μπορείτε να προσθέσετε σε έναν ακέραιο ή κινητής υποδιαστολής για να πάρετε έναν μιγαδικό αριθμό με πραγματικό και φανταστικό μέρος.

Μπορούν να χρησιμοποιηθούν οι κατασκευαστέςint(),float() καιcomplex() για να παράγουν αριθμούς συγκεκριμένου τύπου.

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

x+complex(u,v)=complex(x+u,v)x*complex(u,v)=complex(x*u,x*v)

Μια σύγκριση μεταξύ αριθμών διαφορετικών τύπων συμπεριφέρεται σαν να συγκρίνονται οι ακριβείς τιμές αυτών των αριθμών.[2]

Όλοι οι αριθμητικοί τύποι (εκτός των μιγαδικών) υποστηρίζουν τις ακόλουθες πράξεις (για προτεραιότητες των πράξεων, βλέπεOperator precedence):

Πράξη

Αποτέλεσμα

Σημειώσεις

Ολόκληρη τεκμηρίωση

x+y

άθροισμα τουx καιy

x-y

διαφορά τουx καιy

x*y

γινόμενο τωνx καιy

x/y

πηλίκο τωνx καιy

x//y

ακέραιο μέρος του πηλίκου τωνx καιy

(1)(2)

x%y

υπόλοιπο τουx/y

(2)

-x

x αρνητικό

+x

x αμετάβλητο

abs(x)

απόλυτη τιμή ή μέγεθος τουx

abs()

int(x)

μετατροπή τουx σε ακέραιο

(3)(6)

int()

float(x)

μετατροπή τουx σε κινητής υποδιαστολής

(4)(6)

float()

complex(re,im)

ένας μιγαδικός αριθμός με πραγματικό μέροςre, φανταστικό μέροςim. Τοim μετατρέπεται αυτόματα σε μηδέν.

(6)

complex()

c.conjugate()

συζυγές του μιγαδικού αριθμούc

divmod(x,y)

το ζευγάρι(x//y,x%y)

(2)

divmod()

pow(x,y)

x σε δύναμη τουy

(5)

pow()

x**y

x σε δύναμη τουy

(5)

Σημειώσεις:

  1. Αναφέρεται επίσης ως διαίρεση ακέραιου αριθμού. Για τελεστές τύπουint, το αποτέλεσμα έχει τύποint. Για τελεστές τύπουfloat, το αποτέλεσμα έχει τύποfloat. Γενικά, το αποτέλεσμα είναι ένας ολόκληρος ακέραιος αριθμός, αν και ο τύπος του αποτελέσματος δεν είναι απαραίτηταint. Το αποτέλεσμα είναι πάντα στρογγυλεμένο προς το μείον άπειρο:1//2 είναι0,(-1)//2 είναι-1,1//(-2) είναι-1, και(-1)//(-2) είναι0.

  2. Όχι για μιγαδικούς αριθμούς. Αντίθετα μετατρέψτε σε float χρησιμοποιώνταςabs() εάν είναι εφαρμόσιμο.

  3. Η μετατροπή απόfloat σεint περικόπτει, απορρίπτοντας το κλασματικό μέρος. Δείτε τις συναρτήσειςmath.floor() καιmath.ceil() για εναλλακτικές μετατροπές.

  4. το float δέχεται επίσης τις συμβολοσειρές (strings) «nan» και «inf» με ένα προαιρετικό πρόθεμα «+» ή «-» για το Not a Number (NaN - Όχι αριθμός) και θετικό ή αρνητικό άπειρο.

  5. Η Python ορίζει τοpow(0,0) και το0**0 ως1, όπως συνηθίζεται για τις γλώσσες προγραμματισμού.

  6. Τα αριθμητικά κυριολεκτικά (numeric literals) που γίνονται δεκτά περιλαμβάνουν τα ψηφία0 έως9 ή οποιοδήποτε ισοδύναμο Unicode (σημεία κώδικα με την ιδιότηταNd).

    Δείτε τοThε Unicode Standard για μια πλήρη λίστα σημείων κώδικα με τοNd property.

Όλοι οι τύποιnumbers.Real (int καιfloat) επίσης περιλαμβάνουν τις ακόλουθες λειτουργίες:

Πράξη

Αποτέλεσμα

math.trunc(x)

x μετατρέπεται σεIntegral

round(x[,n])

x στρογγυλοποιημένο σεn ψηφία, στρογγυλοποιώντας το μισό σε ζυγό. Εάν τοn παραλειφθεί, το default του είναι το 0.

math.floor(x)

το μεγαλύτεροIntegral <=x

math.ceil(x)

το μικρότεροIntegral >=x

Για περαιτέρω αριθμητικές πράξεις δείτε τα modulesmath καιcmath.

Bitwise Πράξεις σε Ακέραιους Τύπους

Οι πράξεις bitwise έχουν νόημα μόνο για ακέραιους αριθμούς. Το αποτέλεσμα των bitwise πράξεων υπολογίζεται σαν να εκτελείται σε συμπλήρωμα ως προς δύο με άπειρο αριθμό bits πρόσημου.

Οι προτεραιότητες των δυαδικών πράξεων bitwise είναι όλες χαμηλότερες από τις αριθμητικές πράξεις και υψηλότερες από τις συγκρίσεις· η μοναδιαία πράξη~ έχει την ίδια προτεραιότητα με τις άλλες μοναδιαίες αριθμητικές πράξεις (+ και-).

Αυτός ο πίνακας παραθέτει όλες τις bitwise πράξεις ταξινομημένες σε αύξουσα σειρά:

Πράξη

Αποτέλεσμα

Σημειώσεις

x|y

bitwiseor τωνx καιy

(4)

x^y

bitwiseexclusive or τωνx καιy

(4)

x&y

bitwiseand τωνx καιy

(4)

x<<n

x ολισθημένο (shifted) αριστερά κατάn bits

(1)(2)

x>>n

x ολισθημένο (shifted) δεξιά κατάn bits

(1)(3)

~x

τα bits τουx αντιστραμμένα

Σημειώσεις:

  1. Οι μετρήσεις αρνητικών ολισθήσεων (negative shift) είναι άκυρες και κάνουν raiseValueError.

  2. Μια αριστερή ολίσθηση (shift) κατάn bits ισοδυναμεί με πολλαπλασιασμό μεpow(2,n).

  3. Μια δεξιά ολίσθηση (shift) κατάn bits ισοδυναμεί με διαίρεση πατώματος μεpow(2,n).

  4. Η εκτέλεση αυτών των υπολογισμών με τουλάχιστον ένα επιπλέον bit επέκτασης πρόσημου σε μια αναπαράσταση ενός πεπερασμένου συμπληρώματος ως προς δύο (ένα ωφέλιμο bit-width1+max(x.bit_length(),y.bit_length()) ή περισσότερο) είναι αρκετό για να πάρει το ίδιο αποτέλεσμα σαν να υπήρχε ένας άπειρος αριθμός bits πρόσημου.

Περαιτέρω Μέθοδοι των Ακέραιων Τύπων

Ο τύπος int υλοποιεί τηνnumbers.Integralabstract base class. Επιπλέον, παρέχει μερικές ακόμη μεθόδους:

int.bit_length()

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

>>>n=-37>>>bin(n)'-0b100101'>>>n.bit_length()6

Πιο συγκεκριμένα, εάν τοx είναι μη μηδενικό, τότε τοx.bit_length() είναι μοναδικός θετικός αριθμόςk έτσι ώστε2**(k-1)<=abs(x)<2**k. Ισοδύναμα, όταν τοabs(x) είναι αρκετά μικρό για να έχει ένα σωστά στρογγυλοποιημένο λογάριθμο, τότεk=1+int(log(abs(x),2)). Εάν τοx είναι μηδέν, τότε τοx.bit_length() επιστρέφει0.

Ισοδύναμο με:

defbit_length(self):s=bin(self)# binary representation:  bin(-37) --> '-0b100101's=s.lstrip('-0b')# remove leading zeros and minus signreturnlen(s)# len('100101') --> 6

Added in version 3.1.

int.bit_count()

Επιστρέφει τον αριθμό των μονάδων στην δυαδική αναπαράσταση της απόλυτης τιμής του ακεραίου. Αυτό είναι επίσης γνωστό ως το μέτρημα πληθυσμού (population count). Παράδειγμα:

>>>n=19>>>bin(n)'0b10011'>>>n.bit_count()3>>>(-n).bit_count()3

Ισοδύναμο με:

defbit_count(self):returnbin(self).count("1")

Added in version 3.10.

int.to_bytes(length=1,byteorder='big',*,signed=False)

Επιστρέφει ένα πίνακα από bytes που αναπαριστούν έναν ακέραιο.

>>>(1024).to_bytes(2,byteorder='big')b'\x04\x00'>>>(1024).to_bytes(10,byteorder='big')b'\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00'>>>(-1024).to_bytes(10,byteorder='big',signed=True)b'\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00'>>>x=1000>>>x.to_bytes((x.bit_length()+7)//8,byteorder='little')b'\xe8\x03'

Ο ακέραιος αναπαρίσταται χρησιμοποιώνταςlength bytes και η προεπιλεγμένη του τιμή (default) είναι 1. ΈναOverflowError γίνεται raise αν ο ακέραιος αριθμός δεν δύναται να αναπαρασταθεί με τον αριθμό bytes που δόθηκε.

Το όρισμαbyteorder καθορίζει τη σειρά των byte που χρησιμοποιούνται για την αναπαράσταση του ακέραιου αριθμού, και έχουν προεπιλεγμένη τιμή (default)"big". Εάν τοbyteorder είναι"big", το πιο σημαντικό byte βρίσκεται στην αρχή του πίνακα των bytes. Εάν τοbyteorder είναι"little", το πιο σημαντικό byte βρίσκεται στο τέλος του πίνακα των bytes.

Το όρισμαsigned καθορίζει εάν το συμπλήρωμα ως προς δύο χρησιμοποιείται για να αντιπροσωπεύσει τον ακέραιο. Εάν τοsigned είναιFalse και έχει δοθεί ένας αρνητικός ακέραιος, γίνεται raise έναOverflowError. Η προεπιλεγμένη τιμή (default) για τοsigned είναιFalse.

Οι προεπιλεγμένες τιμές (defaults) μπορούν να χρησιμοποιηθούν για να μετατρέψουν βολικά έναν ακέραιο σε ένα μόνο byte αντικείμενο:

>>>(65).to_bytes()b'A'

Ωστόσο, όταν χρησιμοποιείτε προεπιλεγμένα ορίσματα, μην προσπαθήσετε να μετατρέψετε μια τιμή μεγαλύτερη από 255 ή διαφορετικά θα λάβετε έναOverflowError.

Ισοδύναμο με:

defto_bytes(n,length=1,byteorder='big',signed=False):ifbyteorder=='little':order=range(length)elifbyteorder=='big':order=reversed(range(length))else:raiseValueError("byteorder must be either 'little' or 'big'")returnbytes((n>>i*8)&0xffforiinorder)

Added in version 3.2.

Άλλαξε στην έκδοση 3.11:Προστιθέμενες προεπιλεγμένες τιμές (defaults) ορίσματος γιαlength καιbyteorder.

classmethodint.from_bytes(bytes,byteorder='big',*,signed=False)

Επιστρέφει έναν ακέραιο που αναπαρίσταται από τον δοσμένο πίνακα των bytes.

>>>int.from_bytes(b'\x00\x10',byteorder='big')16>>>int.from_bytes(b'\x00\x10',byteorder='little')4096>>>int.from_bytes(b'\xfc\x00',byteorder='big',signed=True)-1024>>>int.from_bytes(b'\xfc\x00',byteorder='big',signed=False)64512>>>int.from_bytes([255,0,0],byteorder='big')16711680

Το όρισμαbytes πρέπει είτε να είναι έναbytes-like object είτε ένα iterable που παράγει bytes.

Το όρισμαbyteorder καθορίζει τη σειρά byte που χρησιμοποιείται για την αναπαράσταση του ακέραιου αριθμού, και η προεπιλεγμένη τιμή (default) είναι"big". Εάν τοbyteorder είναι"big", το το πιο σημαντικό byte βρίσκεται στην αρχή του πίνακα των bytes. Εάν τοbyteorder είναι"little", το πιο σημαντικό byte βρίσκεται στο τέλος του πίνακα των bytes. Για να ζητήσετε την εγγενή σειρά των bytes του host συστήματος, χρησιμοποιήστε τοsys.byteorder ως τιμή της σειράς byte.

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

Ισοδύναμο με:

deffrom_bytes(bytes,byteorder='big',signed=False):ifbyteorder=='little':little_ordered=list(bytes)elifbyteorder=='big':little_ordered=list(reversed(bytes))else:raiseValueError("byteorder must be either 'little' or 'big'")n=sum(b<<i*8fori,binenumerate(little_ordered))ifsignedandlittle_orderedand(little_ordered[-1]&0x80):n-=1<<8*len(little_ordered)returnn

Added in version 3.2.

Άλλαξε στην έκδοση 3.11:Προστιθέμενη προεπιλεγμένη τιμή (default) ορίσματος για τοbyteorder.

int.as_integer_ratio()

Επιστρέφει ένα ζεύγος ακεραίων των οποίων η αναλογία είναι ίση με τον αρχικό ακέραιο και έχει θετικό παρονομαστή. Ο ακέραιος λόγος ακεραίων (ολόκληρων αριθμών) είναι πάντα ο ακέραιος αριθμός ως αριθμητής και το1 ως παρονομαστής.

Added in version 3.8.

int.is_integer()

ΕπιστρέφειTrue. Υπάρχει για συμβατότητα τύπου duck μεfloat.is_integer().

Added in version 3.12.

Περαιτέρω Μέθοδοι για Float

Ο τύπος float (κινητής υποδιαστολής) υλοποιεί τηνnumbers.Realabstract base class. Ο float έχει επίσης τις ακόλουθες πρόσθετες μεθόδους.

classmethodfloat.from_number(x)

Μέθοδος κλάσης για την επιστροφή ενός αριθμού κινητής υποδιαστολής που κατασκευάζεται από έναν αριθμόx.

Εάν το όρισμα είναι ακέραιος ή αριθμός κινητής υποδιαστολής, επιστρέφεται ένας αριθμός κινητής υποδιαστολής με την ίδια τιμή (εντός της ακρίβειας κινητής υποδιαστολής της Python). Εάν το όρισμα βρίσκεται εκτός του εύρους ενός Python float, θα κάνει raise μιαOverflowError.

Για ένα γενικό αντικείμενο Pythonx,float.from_number(x) ανατίθεται στοx.__float__(). Εάν η__float__() δεν έχει οριστεί, τότε επιστρέφει στη__index__().

Added in version 3.14.

float.as_integer_ratio()

Επιστρέφει ένα ζεύγος ακεραίων των οποίων η αναλογία είναι ακριβώς ίση με το αρχικό float. Ο λόγος είναι στο χαμηλότερο επίπεδο και έχει θετικό παρονομαστή. Κάνει raiseOverflowError στα άπειρα και έναValueError για NaNs.

float.is_integer()

ΕπιστρέφειTrue εάν το float instance είναι πεπερασμένο με ακέραια τιμή καιFalse διαφορετικά:

>>>(-2.0).is_integer()True>>>(3.2).is_integer()False

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

float.hex()

Επιστρέφει μια αναπαράσταση ενός αριθμού κινητής υποδιαστολής ως δεκαεξαδική συμβολοσειρά (string). Για πεπερασμένους αριθμούς κινητής υποδιαστολής, αυτή η αναπαράσταση θα περιλαμβάνει πάντα ένα προπορευόμενο0x και ένα τελευταίοp και εκθέτη.

classmethodfloat.fromhex(s)

Μέθοδος κλάσης για την επιστροφή του float που αντιπροσωπεύεται από μια δεκαεξαδική συμβολοσειρά (string)s. Η συμβολοσειράs μπορεί να έχει κενό διάστημα που στην αρχή ή το τέλος.

Σημειώστε ότι τοfloat.hex() είναι ένα instance method, ενώ τοfloat.fromhex() είναι μια μέθοδος κλάσης.

Μια δεκαεξαδική συμβολοσειρά (string) έχει τη μορφή:

[sign]['0x']integer['.'fraction]['p'exponent]

όπου το προαιρετικόsign μπορεί να είναι είτε+ ή-,integer καιfraction είναι συμβολοσειρές (strings) δεκαεξαδικών ψηφίων και οexponent (εκθέτης) είναι ένας δεκαδικός ακέραιος με προαιρετικό πρόσημο. Τα πεζά ή κεφαλαία δεν είναι σημαντικά και πρέπει να υπάρχει τουλάχιστον ένα δεκαεξαδικό ψηφίο είτε στον ακέραιο είτε στο κλάσμα. Αυτή η σύνταξη είναι παρόμοια με τη σύνταξη που καθορίζεται στην ενότητα 6.4.4.2 του προτύπου C99, καθώς και στη σύνταξη που χρησιμοποιείται στην Java 1.5 και μετά. Ιδιαίτερα, η έξοδος τουfloat.hex() μπορεί να χρησιμοποιηθεί ως δεκαεξαδικό Κυριολεκτική κινητής υποδιαστολής σε κώδικα C ή Java, και παράχθηκαν δεκαεξαδικές συμβολοσειρές με τον χαρακτήρα μορφής%a της C ή τοDouble.toHexString της Java είναι αποδεκτά από τοfloat.fromhex().

Σημειώστε ότι ο εκθέτης είναι γραμμένος με δεκαδικό και όχι δεκαεξαδικό και ότι δίνει τη δύναμη του 2 με την οποία πολλαπλασιάζεται ο συντελεστής. Για παράδειγμα, η δεκαεξαδική συμβολοσειρά (string)0x3.a7p10 αντιπροσωπεύει τον αριθμό κινητής υποδιαστολής(3+10./16+7./16**2)*2,0**10, ή3740,0:

>>>float.fromhex('0x3.a7p10')3740.0

Η εφαρμογή της αντίστροφης μετατροπής σε3740.0 δίνει μία διαφορετική δεκαεξαδική συμβολοσειρά (string) που αντιπροσωπεύει τον ίδιο αριθμό:

>>>float.hex(3740.0)'0x1.d380000000000p+11'

Περαιτέρω Μέθοδοι για Μιγαδικούς

Ο τύποςcomplex υλοποιεί τηνnumbers.Complexabstract base class. Ηcomplex έχει επίσης τις ακόλουθες πρόσθετε μεθόδους.

classmethodcomplex.from_number(x)

Μέθοδος κλάσης για τη μετατροπή ενός αριθμούς σε ένα μιγαδικό αριθμός.

Για ένα γενικό αντικείμενο Pythonx,complex.from_number(x) ανατίθεται στοx.__complex__(). Εάν η__complex__() δεν έχει οριστεί, τότε επιστρέφει__float__(). Εάν η__float__() δεν έχει οριστεί, τότε επιστρέφει στη__index__().

Added in version 3.14.

Κατακερματισμός των αριθμητικών τύπων

Για αριθμούςx καιy, πιθανώς διαφορετικών τύπων, είναι προαπαιτούμενο ότιhash(x)==hash(y) όποτεx==y (δείτε την τεκμηρίωση για την μέθοδο__hash__() για περισσότερες λεπτομέρειες). Για την ευκολότερη εφαρμογή και αποτελεσματικότητα σε ένα εύρος αριθμητικών τύπων (συμπεριλαμβανομένων τωνint,float,decimal.Decimal καιfractions.Fracion) o κατακερματισμός της Python για αριθμητικούς τύπους βασίζεται σε μία μόνο μαθηματική συνάρτηση που ορίζεται για οποιονδήποτε ρητό αριθμό, και ως εκ τούτου ισχύει για όλα τα instancesint καιfractions.Fraction και όλα πεπερασμένα instancesfloat καιdecimal.Decimal. Ουσιαστικά, αυτή η συνάρτηση δίνεται από το modulo μείωσηςP για ένα σταθερό πρώτοP. Η τιμή τουP διατίθεται στην Python ως χαρακτηριστικόmodulus τουsys.hash_info.

Αυτή τη στιγμή, ο πρώτος που χρησιμοποιείται είναιP=2**31-1 σε μηχανήματα με μήκους 32-bit C καιP=2**61-1 σε μηχανήματα με μήκους 64-bit C.

Εδώ οι κανόνες λεπτομερώς:

  • Αν τοx=m/n είναι ένας μη αρνητικός ρητός αριθμός και τοn δεν διαιρείται απόP, ορίστε τοhash(x) ωςm*invmod(n,P)%P, όπου τοinvmod(n,P) μας δίνει το αντίστροφο του modulonP.

  • Αν τοx=m/n είναι ένας μη αρνητικός ρητός αριθμός και τοn διαιρείται με τοP (αλλά τοm όχι) τότε τοn δεν έχει αντίστροφο moduloP και ο κανόνας παραπάνω δεν ισχύει. Σε αυτήν την περίπτωση ορίστε τοhash(x) ως σταθερή τιμήsys.hash_info.inf.

  • Ανx=m/n είναι ένας αρνητικός ρητός αριθμός τότε τοhash(x) ορίζεται ως-hash(-x). Αν το hash που προκύπτει είναι-1, αντικαθίσταται με-2.

  • Οι συγκεκριμένες τιμές τωνsys.hash_info.inf και-sys.hash_info.inf χρησιμοποιούνται ως τιμές κατακερματισμού για το θετικό άπειρο ή το αρνητικό άπειρο (αντίστοιχα).

  • Για ένανcomplex αριθμόz, οι τιμές κατακερματισμού των πραγματικών και φανταστικών μερών συνδυάζονται με τον υπολογισμόhash(z.real)+sys.hash_info.imag*hash(z.imag), μειωμένο modulo2**sys.hash_info.width έτσι ώστε να βρίσκεται στοrange(-2**(sys.hash_info.width-1),2**(sys.hash_info.width-1)). Και πάλι, αν το αποτέλεσμα είναι-1, αντικαθίσταται με-2.

Για να αποσαφηνίσουμε τους παραπάνω κανόνες, εδώ είναι ένα παράδειγμα κώδικα της Python, ισοδύναμο με το built-in hash, για τον υπολογισμό του hash ενός ρητού αριθμού,float, ήcomplex:

importsys,mathdefhash_fraction(m,n):"""Compute the hash of a rational number m / n.    Assumes m and n are integers, with n positive.    Equivalent to hash(fractions.Fraction(m, n)).    """P=sys.hash_info.modulus# Remove common factors of P.  (Unnecessary if m and n already coprime.)whilem%P==n%P==0:m,n=m//P,n//Pifn%P==0:hash_value=sys.hash_info.infelse:# Fermat's Little Theorem: pow(n, P-1, P) is 1, so# pow(n, P-2, P) gives the inverse of n modulo P.hash_value=(abs(m)%P)*pow(n,P-2,P)%Pifm<0:hash_value=-hash_valueifhash_value==-1:hash_value=-2returnhash_valuedefhash_float(x):"""Compute the hash of a float x."""ifmath.isnan(x):returnobject.__hash__(x)elifmath.isinf(x):returnsys.hash_info.infifx>0else-sys.hash_info.infelse:returnhash_fraction(*x.as_integer_ratio())defhash_complex(z):"""Compute the hash of a complex number z."""hash_value=hash_float(z.real)+sys.hash_info.imag*hash_float(z.imag)# do a signed reduction modulo 2**sys.hash_info.widthM=2**(sys.hash_info.width-1)hash_value=(hash_value&(M-1))-(hash_value&M)ifhash_value==-1:hash_value=-2returnhash_value

Τύπος Boolean - :class`bool`

Οι λογικές τιμές (Booleans) αντιπροσωπεύουν τιμές αλήθειας. Ο τύποςbool έχει ακριβώς δύο σταθερές τιμές:True καιFalse.

Η ενσωματωμένη συνάρτησηbool() μετατρέπει οποιαδήποτε τιμή σε λογική (boolean), αν η τιμή μπορεί να ερμηνευτεί ως τιμή αλήθειας (βλέπε παραπάνω ενότηταΈλεγχος Έγκυρης Τιμής).

Για λογικές πράξεις, χρησιμοποιήστε τους τελεστέςbooleanand,or καιnot. Κατά την εφαρμογή των bitwise τελεστών&,|,^ σε δύο booleans, επιστρέφουν ένα bool ισοδύναμο με τις λογικές πράξεις «and», «or», «xor». Ωστόσο, οι λογικοί τελεστέςand,or και!= θα πρέπει να προτιμώνται έναντι των&,| και^.

Αποσύρθηκε στην έκδοση 3.12:Η χρήση του bitwise inversion τελεστή~ είναι ξεπερασμένη και κάνει raise ένα σφάλμα στην Python 3.16.

Ηbool είναι υποκλάση τηςint (βλέπεΑριμθητικοί Τύποι — int, float, complex). Σε πολλά αριθμητικά περιβάλλοντα, ταFalse καιTrue συμπεριφέρονται όπως οι ακέραιοι αριθμοί 0 και 1, αντίστοιχα. Ωστόσο, δεν συνιστάται να βασίζεστε σε αυτό· πιο αναλυτικά κάντε μετατροπή χρησιμοποιώντας τηint() αντ” αυτού.

Τύποι Iterator

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

Μια μέθοδος πρέπει να οριστεί για τα container αντικείμενα ώστε να παρέχειiterable υποστήριξη:

container.__iter__()

Επιστρέφει ένα αντικείμενοiterator. Το αντικείμενο απαιτείται να υποστηρίζει το πρωτόκολλο επαναλήψεων που περιγράφεται παρακάτω. Εάν ένας container υποστηρίζει διαφορετικούς τύπους της επανάληψης, μπορούν να παρασχεθούν πρόσθετες μέθοδοι για να ζητηθούν συγκεκριμένοι iterators για αυτούς τους τύπους επανάληψης. (Ένα παράδειγμα αντικειμένου που υποστηρίζει πολλαπλές μορφές επανάληψης θα ήταν μια δενδρική δομή που υποστηρίζει και αμφότερες τις breadth-first και depth-first μορφές). Αυτή η μέθοδος αντιστοιχεί στη μέθοδοtp_iter της δομής τύπου για αντικείμενα Python στο API της Python/C.

Τα ίδια τα αντικείμενα επαναλήψεων απαιτείται να υποστηρίζουν τις ακόλουθες δύο μεθόδους, οι οποίες από κοινού αποτελούν τοiterator protocol:

iterator.__iter__()

Επιστρέφει το ίδιο το αντικείμενοiterator. Αυτό απαιτείται ώστε να επιτραπεί η χρησιμοποίηση τόσο των containers, όσο και των iterators με τα statementsfor καιin. Αυτή η μέθοδος αντιστοιχεί στη δομήtp_iter των αντικειμένων της Python στο Python/C API.

iterator.__next__()

Επιστρέφει το επόμενο στοιχείο από τονiterator. Εάν δεν υπάρχουν άλλα στοιχεία, κάνει raise την εξαίρεσηStopIteration. Αυτή η μέθοδος αντιστοιχεί στην δομήtp_iternext των αντικειμένων της Python στο API της Python/C.

Η Python ορίζει διάφορα αντικείμενα iterator για την υποστήριξη της επανάληψης πάνω σε γενικούς και συγκεκριμένους τύπους ακολουθιών (sequences), λεξικά (dictionaries) και άλλες πιο εξειδικευμένες μορφές. Οι συγκεκριμένοι τύποι δεν είναι σημαντικοί πέρα από την υλοποίησή του iterator πρωτοκόλλου.

Μόλις η μέθοδος__next__() ενός iterator κάνει raise έναStopIteration, πρέπει να συνεχίσει να το κάνει σε επόμενες κλήσεις. Υλοποιήσεις που δεν υπακούν σε αυτή την ιδιότητα θεωρούνται εσφαλμένες.

Τύποι Generator

Οιgenerators της Python παρέχουν έναν βολικό τρόπο για να υλοποιήσετε το iterator πρωτόκολλο. Εάν η μέθοδος__iter__() ενός container αντικειμένου είναι υλοποιημένη ως generator, θα επιστρέψει αυτόματα ένα αντικείμενο iterator (τεχνικά, ένα αντικείμενο generator) που παρέχει τις__iter__() και__next__() μεθόδους. Περισσότερες πληροφορίες σχετικά με τους generators μπορείτε να βρείτε στηνthe documentation for the yield expression.

Τύποι Ακολουθίας (Sequence) —list,tuple,range

Υπάρχουν τρεις βασικοί τύποι ακολουθιών: lists (λίστες), tuples (πλειάδες) και range objects (αντικείμενα εύρους). Πρόσθετοι τύποι ακολουθίας προσαρμοσμένοι για την επεξεργασίαbinary data καιtext strings περιγράφονται σε ειδικές ενότητες.

Κοινές Λειτουργίες Ακολουθιών (Sequences)

Οι λειτουργίες του παρακάτω πίνακα υποστηρίζονται από τους περισσότερους τύπους ακολουθιών, τόσο μεταβλητών (mutable) όσο και αμετάβλητων (immutable). Ηcollections.abc.Sequence ABC παρέχεται για να διευκολύνει τη σωστή υλοποίηση αυτών των πράξεων σε προσαρμοσμένους τύπους ακολουθίας.

Αυτός ο πίνακας απαριθμεί τις λειτουργίες ακολουθίας ταξινομημένες κατά αύξουσα προτεραιότητα. Στον πίνακα, ταs καιt είναι ακολουθίες του ίδιου τύπου, ταn,i,j καιk είναι ακέραιοι αριθμοί και τοx είναι ένα αυθαίρετο αντικείμενο που πληροί οποιονδήποτε τύπο και περιορισμούς τιμής που επιβάλλονται από τοs.

Οι πράξειςin καιnotin έχουν τις ίδιες προτεραιότητες με τις πράξεις σύγκρισης. Οι πράξεις+ (συνένωση) και* (επανάληψη) έχουν την ίδια προτεραιότητα με τις αντίστοιχες αριθμητικές πράξεις.[3]

Πράξη

Αποτέλεσμα

Σημειώσεις

xins

True αν ένα στοιχείο τουs είναι ίσο με τοx, αλλιώςFalse

(1)

xnotins

False αν ένα στοιχείο τουs είναι ίσο με τοx, αλλιώςTrue

(1)

s+t

η συνένωση τουs καιt

(6)(7)

s*n ήn*s

ίσο με την πρόσθεση τουs στον εαυτό τουn φορές

(2)(7)

s[i]

iο στοιχείο τουs, αρχή το 0

(3)

s[i:j]

slice (υποσύνολο) τουs από τοi μέχρι τοj

(3)(4)

s[i:j:k]

slice (υποσύνολο) τουs από τοi μέχρι τοj με βήμαk

(3)(5)

len(s)

μήκος τουs

min(s)

μικρότερο αντικείμενο τουs

max(s)

μεγαλύτερο αντικείμενο τουs

s.index(x[,i[,j]])

δείκτης της πρώτης εμφάνισης τουx στοs (μετά από τον ή στον δείκτηi και πριν από το δείκτηj)

(8)

s.count(x)

συνολικές εμφανίσεις τουx στοs

Οι ακολουθίες (sequences) του ίδιου τύπου υποστηρίζουν επίσης συγκρίσεις. Ειδικότερα, τα tuples (πλειάδες) και οι λίστες συγκρίνονται λεξικογραφικά συγκρίνοντας τα αντίστοιχα στοιχεία. Αυτό σημαίνει ότι για να συγκρίνουμε ίσα, κάθε στοιχείο πρέπει να συγκρίνεται ως ίσο με το αντίστοιχό του, οι δύο ακολουθίες πρέπει να είναι του ίδιου τύπου και να έχουν το ίδιο μήκος. (Για πλήρεις λεπτομέρειες δείτε την αναφοράComparisons.)

Εμπρόσθιοι και αντίστροφοι iterators πάνω σε μεταβλητές ακολουθίες έχουν πρόσβαση σε τιμές χρησιμοποιώντας ένα δείκτη. Αυτός ο δείκτης θα συνεχίσει να βαδίζει προς τα εμπρός (ή προς τα πίσω) ακόμα και αν η υποκείμενη ακολουθία μεταλλάσσεται. Ο iterator τερματίζει μόνο όταν έναIndexError ή έναStopIteration γίνει raise (ή όταν ο δείκτης πέσει κάτω από το μηδέν).

Σημειώσεις:

  1. Ενώ οι πράξειςin καιnotin χρησιμοποιούνται γενικά μόνο για απλό έλεγχο containment (αν στοιχείο περιέχεται σε μια δομή), ορισμένες εξειδικευμένες ακολουθίες (όπως όπως οιstr,bytes καιbytearray) τις χρησιμοποιούν επίσης για subsequence testing (έλεγχο υποακολουθίας):

    >>>"gg"in"eggs"True
  2. Τιμές τουn μικρότερες από το0 αντιμετωπίζονται ως0 (που δίνει μια κενή ακολουθία του ίδιου τύπου μεs). Σημειώστε ότι τα στοιχεία της ακολουθίαςs δεν αντιγράφονται· αναφέρονται πολλές φορές. Αυτό συχνά στοιχειώνει τα άτομα που ξεκινούν με Python- σκεφτείτε:

    >>>lists=[[]]*3>>>lists[[], [], []]>>>lists[0].append(3)>>>lists[[3], [3], [3]]

    Αυτό που συνέβη είναι ότι το[[]] είναι μια λίστα ενός στοιχείου που περιέχει μία κενή λίστα, οπότε και τα τρία στοιχεία της[[]]*3 είναι αναφορές σε αυτή τη μία κενή λίστα. Η τροποποίηση οποιουδήποτε από τα στοιχεία τηςlists τροποποιεί αυτή τη μοναδική λίστα. Μπορείτε να δημιουργήσετε μια λίστα από διαφορετικές λίστες με αυτόν τον τρόπο:

    >>>lists=[[]foriinrange(3)]>>>lists[0].append(3)>>>lists[1].append(5)>>>lists[2].append(7)>>>lists[[3], [5], [7]]

    Περαιτέρω επεξήγηση είναι διαθέσιμη στο λήμμα FAQΠως φτιάχνω μια πολυδιάστατη λίστα;.

  3. Εάν τοi ή τοj είναι αρνητικό, ο δείκτης είναι σχετικός με το τέλος της ακολουθίαςs: τοlen(s)+i ή τοlen(s)+j αντικαθίσταται. Σημειώστε όμως ότι το-0 εξακολουθεί να είναι0.

  4. Το υποσύνολο (slice) τουs από τοi έως τοj ορίζεται ως η ακολουθία στοιχείων με δείκτηk τέτοια ώστεi<=k<j`. Εάν τοi ή τοj είναι μεγαλύτερο από τοlen(s), χρησιμοποιήστε τοlen(s). Αν τοi παραλείπεται ή είναιNone, χρησιμοποιήστε0. Αν τοj παραλείπεται ή είναιμηδέν, χρησιμοποιήστε τοlen(s). Εάν τοi είναι μεγαλύτερο από ή ίσο με τοj, το υποσύνολο (slice) είναι κενό.

  5. Το υποσύνολο (slice) τουs απόi έωςj με βήμαk ορίζεται ως η ακολουθία των στοιχείων με δείκτηx=i+n*k τέτοια ώστε0<=n<(j-i)/k. Με άλλα λόγια, οι δείκτες είναιi,i+k,i+2*k,i+3*k και ούτω καθεξής, σταματώντας όταν φτάσουμε στοj (αλλά ποτέ δεν περιλαμβάνει τοj). Όταν τοk είναι θετικό, ταi καιj μειώνονται σεlen(s) αν είναι μεγαλύτερα. Όταν τοk είναι αρνητικό, ταi καιj μειώνονται σεlen(s)-1 αν είναι μεγαλύτερα. Εάν ταi ήj παραλείπονται ή είναιNone, γίνονται τιμές «end» (το τέλος εξαρτάται από το πρόσημο τουk). Σημειώστε ότι τοk δεν μπορεί να είναι μηδέν. Εάν τοk είναιNone, αντιμετωπίζεται όπως το1.

  6. Η συνένωση αμετάβλητων ακολουθιών (immutable sequences) οδηγεί πάντα σε ένα νέο αντικείμενο. Αυτό σημαίνει ότι η δημιουργία μιας ακολουθίας με επαναλαμβανόμενη συνένωση θα έχει τετραγωνικό κόστος χρόνου εκτέλεσης (runtime cost) στο συνολικό μήκος της ακολουθίας. Για να πάρετε ένα γραμμικό κόστος χρόνου εκτέλεσης (runtime cost), πρέπει να μεταβείτε σε μία από τις παρακάτω εναλλακτικές λύσεις:

    • αν συνενώνεται αντικείμεναstr, μπορείτε να δημιουργήσετε μια λίστα και να χρησιμοποιήσετε τηνstr.join() στο τέλος ή αλλιώς να γράψετε σε έναio.StringIO instance και ανακτήσετε την τιμή της όταν ολοκληρωθεί

    • αν συνενώνεται αντικείμεναbytes, μπορείτε να χρησιμοποιήσετε παρόμοια τη μέθοδοbytes.join() ήio.BytesIO, ή μπορείτε να κάνετε in-place συνένωση (concatenation) με έναbytearray αντικείμενο. Τα αντικείμεναbytearray είναι μεταβλητά και έχουν έναν αποτελεσματικό μηχανισμό συνολικής κατανομής (overallocation)

    • αν συνενώνεται αντικείμεναtuple, επεκτείνετε μιαlist αντ” αυτού

    • για άλλους τύπους, ερευνήστε τη σχετική τεκμηρίωση των κλάσεων

  7. Ορισμένοι τύποι ακολουθιών (όπωςrange) υποστηρίζουν μόνο ακολουθίες στοιχείων που ακολουθούν συγκεκριμένα μοτίβα, και ως εκ τούτου δεν υποστηρίζουν ακολουθία συνένωση ή επανάληψη.

  8. Τοindex κάνει raiseValueError όταν τοx δεν βρίσκεται στοs. Όχι όλες οι υλοποιήσεις υποστηρίζουν τη διαβίβαση των πρόσθετων ορίωνi καιj. Αυτές οι παράμετροι επιτρέπουν την αποτελεσματική αναζήτηση υποτμημάτων της ακολουθίας. Η διαβίβαση των πρόσθετων ορίων είναι περίπου ισοδύναμη με τη χρήση τουs[i:j].index(x), μόνο χωρίς να αντιγράφονται δεδομένα και με τον επιστρεφόμενο δείκτη να είναι σχετικός με την αρχή της ακολουθίας και όχι στην αρχή του υποσυνόλου (slice).

Τύποι Αμετάβλητων Ακολουθιών (Sequences)

Η μόνη λειτουργία που υλοποιούν οι αμετάβλητοι γενικοί τύποι ακολουθίας που δεν είναι υλοποιημένοι από μεταβλητούς τύπους ακολουθίας, είναι η υποστήριξη τηςhash() built-in.

Αυτή η υποστήριξη επιτρέπει αμετάβλητες ακολουθίες, όπως οι περιπτώσεις τωνtuple, να χρησιμοποιούνται ως κλειδιάdict και να αποθηκεύονται σεset καιfrozenset instances.

Η προσπάθεια κατακερματισμού μιας αμετάβλητης ακολουθίας που περιέχει μη κατακερματιστέες (unhashable) τιμές θα οδηγήσει σεTypeError.

Τύποι Μεταβλητών Ακολουθιών (Sequences)

Οι λειτουργίες του ακόλουθου πίνακα ορίζονται σε μεταβλητούς τύπους ακολουθίας. Ηcollections.abc.MutableSequence ABC παρέχεται για να κάνει ευκολότερη την σωστή υλοποίηση αυτών των λειτουργιών σε προσαρμοσμένους τύπους ακολουθιών.

Στον πίνακα τοs είναι ένα instance ενός μεταβλητού τύπου ακολουθίας, τοt είναι οποιοδήποτε iterable αντικείμενο και τοx είναι ένα αυθαίρετο αντικείμενο που πληροί οποιονδήποτε τύπο και περιορισμούς τιμής που επιβάλλονται από τοs (για παράδειγμα, τοbytearray δέχεται μόνο ακέραιους που πληρούν τον περιορισμό0<=x<=255).

Πράξη

Αποτέλεσμα

Σημειώσεις

s[i]=x

το στοιχείοi τουs αντικαθίσταται από τοx

s[i:j]=t

το υποσύνολο (slice) τουs από τοi έως τοj αντικαθίσταται από τα περιεχόμενα του iterablet

dels[i:j]

ίδιο με τοs[i:j]=[]

s[i:j:k]=t

τα στοιχεία τουs[i:j:k] αντικαθίστανται από εκείνα τουt

(1)

dels[i:j:k]

αφαιρεί τα στοιχεία τουs[i:j:k] από τη λίστα

s.append(x)

εισάγει τοx στο τέλος της ακολουθίας (ίδιο μεs[len(s):len(s)]=[x])

s.clear()

αφαιρεί όλα τα στοιχεία από τοs (ίδιο με τοdels[:])

(5)

s.copy()

δημιουργεί ένα shallow αντίγραφο τουs (ίδιο με τοs[:])

(5)

s.extend(t) ήs+=t

επεκτείνει τοs με τα περιεχόμενα τουt (ως επί το πλείστον το ίδιο με τοs[len(s):len(s)]=t)

s*=n

ενημερώνει τοs με το περιεχόμενό του επαναλαμβανόμενοn φορές

(6)

s.insert(i,x)

εισάγει τοx στοs στο δείκτη που δίνεται από τοi (το ίδιο με τοs[i:i]=[x])

s.pop() ήs.pop(i)

ανακτά το στοιχείο στοi και το αφαιρεί επίσης από τοs

(2)

s.remove(x)

αφαιρεί το πρώτο στοιχείο από τοs όπουs[i] είναι ίσο μεx

(3)

s.reverse()

αντιστρέφει τα στοιχεία τουs

(4)

Σημειώσεις:

  1. Αν τοk δεν είναι ίσο με1, τοt πρέπει να έχει το ίδιο μήκος με το τμήμα που αντικαθιστά.

  2. Το προαιρετικό όρισμαi έχει προεπιλεγμένη τιμή-1, έτσι ώστε από default το τελευταίο στοιχείο αφαιρείται και επιστρέφεται.

  3. ηremove() κάνει raiseValueError όταν τοx δεν βρίσκεται στοs.

  4. Η μέθοδοςreverse() τροποποιεί την ακολουθία στη θέση της για οικονομία χώρου όταν αντιστρέφεται μια μεγάλη ακολουθία. Να υπενθυμίσουμε στους χρήστες ότι λειτουργεί με παρενέργεια, δεν επιστρέφει την αντιστραμμένη ακολουθία.

  5. ηclear() και ηcopy() περιλαμβάνονται για λόγους συνέπειας με τα interfaces των μεταβλητών container που δεν υποστηρίζουν λειτουργίες τμηματοποίησης (όπως ταdict καιset). Ηcopy() δεν αποτελεί μέρος τηςcollections.abc.MutableSequence ABC, αλλά οι περισσότερες κλάσεις μεταβλητών ακολουθιών την παρέχουν.

    Added in version 3.3:μέθοδοιclear() καιcopy().

  6. Η τιμήn είναι ένας ακέραιος αριθμός ή ένα αντικείμενο που υλοποιεί την__index__(). Οι μηδενικές και αρνητικές τιμές τουn καθαρίζουν την ακολουθία. Τα στοιχεία της ακολουθίας δεν αντιγράφονται· αναφέρονται πολλές φορές, όπως εξηγείται για τοs*n` στοΚοινές Λειτουργίες Ακολουθιών (Sequences).

Λίστες

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

classlist([iterable])

Οι λίστες μπορούν να κατασκευαστούν με διάφορους τρόπους:

  • Χρησιμοποιείστε ένα ζεύγος αγκυλών για να δηλώσετε την κενή λίστα:[]

  • Χρησιμοποιώντας αγκύλες, διαχωρίζοντας τα στοιχεία με κόμματα:[a],[a,b,c]

  • Χρήση ενός list comprehension:[xforxiniterable]

  • Χρήση του κατασκευαστή τύπου (type constructor):list() ήlist(iterable)

Ο κατασκευαστής (constructor) δημιουργεί μια λίστα της οποίας τα στοιχεία είναι τα ίδια και με την ίδια σειρά όπως τα στοιχεία τουiterable. Τοiterable μπορεί να είναι είτε μια ακολουθία, είτε ένας container που υποστηρίζει την επανάληψη, ή ένα αντικείμενο iterator. Εάν τοiterable είναι ήδη μια λίστα, δημιουργείται ένα αντίγραφο και επιστρέφεται, παρόμοια με τηνiterable[:]. Για παράδειγμα, ηlist('abc') επιστρέφει['a','b','c'] και ηlist((1,2,3)) επιστρέφει[1,2,3]. Αν δεν δοθεί κανένα όρισμα, ο κατασκευαστής δημιουργεί μία νέα κενή λίστα,[].

Πολλές άλλες λειτουργίες παράγουν επίσης λίστες, συμπεριλαμβανομένης της built-insorted().

Οι λίστες υλοποιούν όλες τιςcommon καιmutable λειτουργίες ακολουθίας. Οι λίστες παρέχουν επίσης την ακόλουθη πρόσθετη μέθοδο:

sort(*,key=None,reverse=False)

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

ηsort() δέχεται δύο ορίσματα που μπορούν να περάσουν μόνο με τη λέξη-κλειδί (keyword-only arguments):

τοkey καθορίζει μια συνάρτηση ενός ορίσματος που χρησιμοποιείται για την εξαγωγή ενός κλειδιού σύγκρισης (comparison key) από κάθε στοιχείο της λίστας (για παράδειγμα,key=str.lower). Το κλειδί που αντιστοιχεί σε κάθε στοιχείο της λίστας υπολογίζεται μία φορά και στη συνέχεια χρησιμοποιείται για ολόκληρη τη διαδικασία ταξινόμησης. Η προεπιλεγμένη τιμή (default)None σημαίνει ότι τα στοιχεία της λίστας ταξινομούνται απευθείας χωρίς να υπολογίζεται ξεχωριστή τιμή κλειδιού.

Το utilityfunctools.cmp_to_key() είναι διαθέσιμο για τη μετατροπή μια συνάρτησηcmp στυλ 2.x σε συνάρτησηkey.

ηreverse είναι μια λογική (boolean) τιμή. Αν τεθεί σεTrue, τότε τα στοιχεία της λίστας ταξινομούνται σαν να ήταν αντίστροφη κάθε σύγκριση.

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

Η μέθοδοςsort() είναι εγγυημένα σταθερή. Μια ταξινόμηση είναι σταθερή αν εγγυάται ότι δεν θα αλλάξει τη σχετική σειρά των στοιχείων που συγκρίνουν ίσα — αυτό είναι χρήσιμο για την ταξινόμηση σε πολλαπλά περάσματα (για παράδειγμα, ταξινόμηση κατά τμήμα, στη συνέχεια με βάση το μισθολογικό κλιμάκιο κτλ).

Για παραδείγματα ταξινόμησης και ένα σύντομο tutorial, δείτεSorting Techniques.

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

Πλειάδες (Tuples)

Οι πλειάδες (tuples) είναι αμετάβλητες ακολουθίες, που συνήθως χρησιμοποιούνται για την αποθήκευση συλλογών ετερογενών δεδομένων (όπως οι 2-tuples που παράγονται από την built-inenumerate()). Τα tuples χρησιμοποιούνται επίσης για περιπτώσεις όπου μια αμετάβλητη ακολουθία ομοιογενών δεδομένων (όπως για παράδειγμα για να επιτρέπεται η αποθήκευση σε έναset ή σε έναdict instance).

classtuple([iterable])

Οι πλειάδες (tuples) μπορούν να κατασκευαστούν με διάφορους τρόπους:

  • Χρήση ενός ζεύγους παρενθέσεων για να δηλωθεί το κενό tuple (πλειάδα):()

  • Χρήση ενός κόμματος στο τέλος για ένα μοναδικό tuple (πλειάδα):a, ή(a,)

  • Διαχωρισμός στοιχείων με κόμμα:a,b,c ή(a,b,c)

  • Χρήση του ενσωματωμένουtuple():tuple() ήtuple(iterable)

Ο κατασκευαστής (constructor) δημιουργεί μια πλειάδα (tuple) του οποίου τα στοιχεία είναι τα ίδια και στην ίδια σειρά με τα στοιχεία τουiterable. Ηiterable μπορεί να είναι είτε μια ακολουθία, είτε έναν container που υποστηρίζει την επανάληψη, ή ένα αντικείμενο iterator. Εάν τοiterable είναι ήδη ένα tuple, επιστρέφεται αμετάβλητο. Για παράδειγμα, τοtuple('abc') επιστρέφει('a','b','c') και τοtuple([1,2,3]) επιστρέφει(1,2,3). Αν δεν δοθεί κανένα όρισμα, ο κατασκευαστής δημιουργεί μια ένα κενό tuple,().

Σημειώστε ότι στην πραγματικότητα το κόμμα είναι αυτό που κάνει ένα tuple (πλειάδα), όχι οι παρενθέσεις. Οι παρενθέσεις είναι προαιρετικές, εκτός από την περίπτωση κενού tuple ή όταν χρειάζονται για την αποφυγή συντακτικής ασάφειας. Για παράδειγμα, ηf(a,b,c) είναι μια κλήση συνάρτησης με τρία ορίσματα, ενώ ηf((a,b,c)) είναι μια συνάρτηση κλήση συνάρτησης με ένα 3-tuple ως μοναδικό όρισμα.

Τα Tuples υλοποιούν όλες τις πράξεις ακολουθιώνcommon.

Για ετερογενείς συλλογές δεδομένων όπου η πρόσβαση με βάση το όνομα είναι σαφέστερη από την πρόσβαση με βάση το δείκτη, τοcollections.namedtuple() μπορεί να είναι μια πιο κατάλληλη επιλογή από ένα απλό αντικείμενο tuple (πλειάδα).

Εύρη (Ranges)

Ο τύποςrange αναπαριστά μια αμετάβλητη ακολουθία αριθμών και συνήθως χρησιμοποιείται για την επανάληψη ενός συγκεκριμένου αριθμού επαναλήψεων σε βρόχουςfor.

classrange(stop)
classrange(start,stop[,step])

Τα ορίσματα του κατασκευαστή εύρους (range constructor) πρέπει να είναι ακέραιοι αριθμοί (είτε της built-inint ή οποιοδήποτε αντικείμενο που υλοποιεί την ειδική μέθοδο__index__()). Εάν το όρισμαstep παραλείπεται, το προεπιλογή (default) είναι1. Εάν το όρισμαstart παραλείπεται, το προεπιλογή (default) είναι0. Εάν τοstep είναι μηδέν, γίνεται raise έναValueError.

Για ένα θετικόβήμα, τα περιεχόμενα του range (εύρους)r καθορίζονται από τον τύποr[i]=start+step*i όπουi>=0 καιr[i]<stop.

Για ένα αρνητικόβήμα, τα περιεχόμενα του εύρους (range) εξακολουθούν να καθορίζονται από τον τύποr[i]=start+step*i, αλλά οι περιορισμοί είναιi>=0 καιr[i]>stop.

Ένα αντικείμενο range θα είναι άδειο εάν τοr[0] δεν πληροί τον περιορισμό τιμής. Τα ranges υποστηρίζουν αρνητικούς δείκτες, αλλά αυτοί ερμηνεύονται ως δείκτες από το τέλος της ακολουθίας που καθορίζεται από τους θετικούς δείκτες.

Τα ranges που περιέχουν απόλυτες τιμές μεγαλύτερες απόsys.maxsize είναι επιτρεπτά, αλλά ορισμένα χαρακτηριστικά (όπωςlen()) μπορεί να κάνουν raiseOverflowError.

Παραδείγματα Range:

>>>list(range(10))[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]>>>list(range(1,11))[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]>>>list(range(0,30,5))[0, 5, 10, 15, 20, 25]>>>list(range(0,10,3))[0, 3, 6, 9]>>>list(range(0,-10,-1))[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]>>>list(range(0))[]>>>list(range(1,0))[]

Τα ranges υλοποιούν όλες τις ακολουθίεςcommon εκτός από τη συνένωση και την επανάληψη (λόγω του γεγονότος ότι τα range αντικείμενα μπορούν να αναπαριστούν μόνο ακολουθίες που ακολουθούν ένα αυστηρό μοτίβο και η επανάληψη και η συνένωση συνήθως παραβιάζουν αυτό το πρότυπο).

start

Η τιμή της παραμέτρουstart0 αν η παράμετρος δεν παρέχεται)

stop

Η τιμή της παραμέτρουstop

step

Η τιμή της παραμέτρουstep1 αν η παράμετρος δεν παρέχεται)

Το πλεονέκτημα του τύπουrange έναντι ενός κανονικού τύπουlist ήtuple είναι ότι ένα αντικείμενοrange θα παίρνει πάντα το ίδιο (μικρό) ποσό μνήμης, ανεξάρτητα από το μέγεθος του range που αντιπροσωπεύει (μιας και αποθηκεύει μόνο τις τιμέςstart,stop καιstep, υπολογίζοντας τα μεμονωμένα στοιχεία και τις υποπεριοχές όπως απαιτείται).

Τα αντικείμενα range υλοποιούν τηνcollections.abc.Sequence ABC, και παρέχουν χαρακτηριστικά όπως δοκιμές περιορισμού, αναζήτηση δείκτη στοιχείου, τεμαχισμό και υποστήριξη αρνητικών δεικτών (βλ.Τύποι Ακολουθίας (Sequence) — list, tuple, range):

>>>r=range(0,20,2)>>>rrange(0, 20, 2)>>>11inrFalse>>>10inrTrue>>>r.index(10)5>>>r[5]10>>>r[:5]range(0, 10, 2)>>>r[-1]18

Ο έλεγχος των αντικειμένων range για ισότητα με== και!= τα συγκρίνει ως ακολουθίες. Δηλαδή, δύο αντικείμενα range θεωρούνται ίσα αν αντιπροσωπεύουν την ίδια ακολουθία τιμών. (Σημειώστε ότι δύο αντικείμενα range που συγκρίνονται ως ίσα μπορεί να έχουν διαφορετικάstart,stop καιstep χαρακτηριστικά, για παράδειγμαrange(0)==range(2,1,3) ήrange(0,3,2)==range(0,4,2).)

Άλλαξε στην έκδοση 3.2:Υλοποιείστε την ακολουθία ABC. Υποστηρίξτε την τμηματοποίηση και τους αρνητικούς δείκτες. Δοκιμάστε ταint αντικείμενα για συμμετοχή σε σταθερό χρόνο αντί της επανάληψης σε όλα τα αντικείμενα.

Άλλαξε στην έκδοση 3.3:Ορίστε τα “==” και “!=” για να συγκρίνετε αντικείμενα range με βάση την ακολουθία των τιμών που ορίζουν (αντί να συγκρίνουν με βάση την ταυτότητα του αντικειμένου).

Προστέθηκαν ταstart,stop καιstep attributes.

Δείτε επίσης

  • Η συνταγήlinspace δείχνει πώς να υλοποιήσετε μια lazy έκδοση του range κατάλληλη για εφαρμογές κινητής υποδιαστολής.

Σύνοψη μεθόδων τύπου κειμένου και δυαδική ακολουθίας

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

Κατηγορία

str methods

οι μέθοδοιbytes καιbytearray

Μορφοποίηση

str.format()

str.format_map()

f-strings

printf-style String Formatting

Μορφοποίηση Bytes τύπου printf

Αναζήτηση και Αντικατάσταση

str.find()

str.rfind()

bytes.find()

bytes.rfind()

str.index()

str.rindex()

bytes.index()

bytes.rindex()

str.startswith()

bytes.startswith()

str.endswith()

bytes.endswith()

str.count()

bytes.count()

str.replace()

bytes.replace()

Διαχωρισμός και Ένωση

str.split()

str.rsplit()

bytes.split()

bytes.rsplit()

str.splitlines()

bytes.splitlines()

str.partition()

bytes.partition()

str.rpartition()

bytes.rpartition()

str.join()

bytes.join()

Ταξινόμηση Συμβολοσειρών

str.isalpha()

bytes.isalpha()

str.isdecimal()

str.isdigit()

bytes.isdigit()

str.isnumeric()

str.isalnum()

bytes.isalnum()

str.isidentifier()

str.islower()

bytes.islower()

str.isupper()

bytes.isupper()

str.istitle()

bytes.istitle()

str.isspace()

bytes.isspace()

str.isprintable()

Χειρισμός υποθέσεων

str.lower()

bytes.lower()

str.upper()

bytes.upper()

str.casefold()

str.capitalize()

bytes.capitalize()

str.title()

bytes.title()

str.swapcase()

bytes.swapcase()

Συμπλήρωση και Αφαίρεση

str.ljust()

str.rjust()

bytes.ljust()

bytes.rjust()

str.center()

bytes.center()

str.expandtabs()

bytes.expandtabs()

str.strip()

bytes.strip()

str.lstrip()

str.rstrip()

bytes.lstrip()

bytes.rstrip()

Μετάφραση και Κωδικοποίηση

str.translate()

bytes.translate()

str.maketrans()

bytes.maketrans()

str.encode()

bytes.decode()

Τύπος Ακολουθίας (Sequence) Κειμένου —str

Τα δεδομένα κειμένου στην Python αντιμετωπίζονται με αντικείμεναstr ήstrings. Τα αλφαριθμητικά (strings) είναι αμετάβλητεςsequences των Unicode points. Τα αλφαριθμητικά γράφονται με διάφορους τρόπους:

  • Απλά εισαγωγικά:'allowsembedded"double"quotes'

  • Διπλά εισαγωγικά:'allowsembedded"double"quotes'

  • Τριπλά εισαγωγικά:'''Threesinglequotes''',"""Threedoublequotes"""

Τα αλφαριθμητικά σε τριπλά εισαγωγικά μπορούν να καλύπτουν πολλές γραμμές - όλα τα σχετικά κενά θα συμπεριληφθούν στο αλφαριθμητικό.

Τα Αλφαριθμητικά (strings) που αποτελούν μέρος μιας ενιαίας έκφρασης και έχουν μόνο κενά μεταξύ τους, θα μετατραπούν σιωπηρά σε ένα ενιαίο αλφαριθμητικό literal. Δηλαδή,("spam""eggs")=="spameggs".

Δείτε ταString and Bytes literals για περισσότερες πληροφορίες σχετικά με τις διάφορες μορφές των αλφαριθμητικών, συμπεριλαμβανομένων των υποστηριζόμενων ακολουθιώνescape sequences, και τουr («raw») πρόθεμα που απενεργοποιεί την επεξεργασία των περισσότερων ακολουθιών διαφυγής.

Τα αλφαριθμητικά (strings) μπορούν επίσης να δημιουργηθούν από άλλα αντικείμενα χρησιμοποιώντας τον constructorstr.

Εφόσον δεν υπάρχει ξεχωριστός τύπος «character», το indexing μιας συμβολοσειράς (string) παράγει συμβολοσειρές μήκους 1. Δηλαδή, για μια μη κενή συμβολοσειράs,s[0]==s[0:1].

Δεν υπάρχει επίσης μεταβλητός τύπος συμβολοσειράς (string), αλλά τοstr.join() ή τοio.StringIO μπορεί να χρησιμοποιηθεί για την αποτελεσματική κατασκευή συμβολοσειρών από πολλαπλά μέρη.

Άλλαξε στην έκδοση 3.3:Για συμβατότητα προς τα πίσω (backwards compatibility) με τη σειρά Python 2, το πρόθεμαu είναι επιτρεπτό και πάλι σε αλφαριθμητικά. Δεν έχει καμία επίδραση στη σημασία των αλφαριθμητικών και δεν μπορεί να συνδυαστεί με το πρόθεμαr.

classstr(object='')
classstr(object=b'',encoding='utf-8',errors='strict')

Επιστρέφει μια έκδοσηstring τουobject. Αν τοobject δεν παρέχεται, επιστρέφει κενό αλφαριθμητικό. Διαφορετικά, η συμπεριφορά τηςstr() εξαρτάται από το αν δίνεταιencoding ήerrors, ως εξής.

Αν δεν έχει δοθεί ούτεencoding ούτεerrors, τοstr(object) επιστρέφειtype(object).__str__(object), το οποίο είναι το «informal» ή ωραία εκτυπώσιμη αναπαράσταση συμβολοσειράς (string) τουobject. Για αντικείμενα συμβολοσειράς, είναι η ίδια η συμβολοσειρά. Εάν τοobject δεν έχει την__str__(), τότε ηstr() επιστρέφει τη μέθοδοrepr(object).

Εάν δίνεται τουλάχιστον ένα από ταencoding ήerrors, τοobject θα πρέπει να είναι έναbytes-like object (π.χ.bytes ήbytearray). Σε αυτή την περίπτωση, αν τοobject είναι ένα αντικείμενοbytesbytearray), τότε τοstr(bytes,encoding,errors) είναι ισοδύναμο με τοbytes.decode(encoding,errors). Διαφορετικά, το αντικείμενο bytes που υποκρύπτει το αντικείμενο buffer λαμβάνεται πριν από την κλήση τουbytes.decode(). ΔείτεΤύποι δυαδικής ακολουθίας — bytes, bytearray, memoryview καιBuffer Protocol για πληροφορίες σχετικά με τα αντικείμενα buffer.

Πέρασμα ενός αντικειμένουbytes στοstr() χωρίς τοencoding ή τοerrors ορίσματα εμπίπτει στην πρώτη περίπτωση επιστροφής της άτυπης αναπαράστασης συμβολοσειράς (string) (δείτε επίσης την επιλογή-b της γραμμής εντολών για Python). Για παράδειγμα:

>>>str(b'Zoot!')"b'Zoot!'"

Για περισσότερες πληροφορίες σχετικά με την κλάσηstr και τις μεθόδους της, δείτεΤύπος Ακολουθίας (Sequence) Κειμένου — str και την ενότηταΜέθοδοι Συμβολοσειράς (String) παρακάτω. Για την παραγωγή μορφοποιημένων συμβολοσειρών (string), ανατρέξτε στις ενότητεςf-strings καιFormat String Syntax. Επιπλέον, δείτε την ενότηταText Processing Services.

Μέθοδοι Συμβολοσειράς (String)

Οι συμβολοσειρές (string) υλοποιούν όλες τις λειτουργίες τωνcommon ακολουθιών, μαζί με τις πρόσθετες μεθόδους που περιγράφονται παρακάτω.

Οι συμβολοσειρές (string) υποστηρίζουν επίσης δύο στυλ μορφοποίησης συμβολοσειρών, το ένα παρέχει ένα μεγάλο βαθμό ευελιξίας και προσαρμογής (βλέπεstr.format(),Format String Syntax καιCustom String Formatting) και το άλλο βασίζεται στο στυλ μορφοποίησηςprintf της C που χειρίζεται ένα στενότερο εύρος τύπων και είναι λίγο πιο δύσκολο να χρησιμοποιηθεί σωστά, αλλά είναι συχνά ταχύτερο για τις περιπτώσεις που μπορεί να χειριστεί (printf-style String Formatting).

Το τμήμαText Processing Services της πρότυπης βιβλιοθήκης καλύπτει έναν αριθμό από άλλες ενότητες που παρέχουν διάφορες βοηθητικές υπηρεσίες που σχετίζονται με το κείμενο (συμπεριλαμβανομένης της υποστήριξης των κανονικών εκφράσεων στην ενότηταre).

str.capitalize()

Επιστρέφει ένα αντίγραφο της συμβολοσειράς (string) με τον πρώτο χαρακτήρα κεφαλαίο και τα υπόλοιπα με πεζά γράμματα.

Άλλαξε στην έκδοση 3.8:Ο πρώτος χαρακτήρας τίθεται τώρα σε titlecase αντί για uppercase. Αυτό σημαίνει ότι χαρακτήρες όπως οι διγράφοι (digraphs) θα έχουν μόνο το πρώτο γράμμα τους με κεφαλαίο, αντί για όλους τους χαρακτήρες.

str.casefold()

Επιστρέφει ένα αντίγραφο της συμβολοσειράς (string) σε casefolded μορφή. Οι casefolded συμβολοσειρές μπορούν να χρησιμοποιηθούν για caseless matching.

Το casefolding είναι παρόμοιο με το lowercasing αλλά πιο επιθετικό επειδή έχει ως στόχο να αφαιρέσει όλες τις διακρίσεις της πεζότητας σε μια συμβολοσειρά (string). Για παράδειγμα, το γερμανικό πεζό γράμμα'ß' ισοδυναμεί με"ss". Αφού είναι ήδη πεζό, ηlower() δεν θα έκανε τίποτα στο'ß'· ηcasefold() το μετατρέπει σε"ss".

Ο αλγόριθμος casefoldingπεριγράφεται στην ενότητα 3.13 “Default Case Folding” του προτύπου Unicode.

Added in version 3.3.

str.center(width[,fillchar])

Επιστρέφει ένα κεντραρισμένο σε μια συμβολοσειρά (string) μήκουςπλάτος. Το padding γίνεται με τη χρήση του καθορισμένουfillchar (το default είναι ένα κενό ASCII). Η αρχική συμβολοσειρά επιστρέφεται εάν τοwidth είναι μικρότερο ή ίσο με τοlen(s).

str.count(sub[,start[,end]])

Επιστρέφει τον αριθμό των μη επικαλυπτόμενων (non-overalpping) εμφανίσεων της υποομάδαςsub στο εύρος [start,end]. Τα προαιρετικά ορίσματαstart καιend ερμηνεύονται όπως στο slice notation.

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

str.encode(encoding='utf-8',errors='strict')

Επιστρέφει την συμβολοσειρά (string) κωδικοποιημένη σεbytes.

τοencoding έχει default σε'utf-8'- δείτεStandard Encodings για πιθανές τιμές.

τοerrors ελέγχει τον τρόπο χειρισμού των σφαλμάτων κωδικοποίησης. Εάν είναι'strict' (το default), τότε γίνεται raise μια εξαίρεσηUnicodeError. Άλλες πιθανές τιμές είναι τα'ignore','replace','xmlcharrefreplace','backslashreplace' και οποιοδήποτε άλλο όνομα που έχει καταχωρηθεί μέσω τουcodecs.register_error(). Δείτε τοError Handlers για λεπτομέρειες.

Για λόγους απόδοσης, η τιμή τωνerrors δεν ελέγχεται ως προς την εγκυρότητα εκτός αν όντως προκύψει σφάλμα κωδικοποίησης, αν τοPython Development Mode είναι ενεργοποιημένο ή αν έναdebug build χρησιμοποιείται.

Άλλαξε στην έκδοση 3.1:Επιπρόσθετη υποστήριξη για keyword ορίσματα.

Άλλαξε στην έκδοση 3.9:Η τιμή του όρουerrors ελέγχεται τώρα στοPython Development Mode και στοdebug mode.

str.endswith(suffix[,start[,end]])

ΕπιστρέφειTrue αν η συμβολοσειρά (string) τελειώνει με το καθορισμένοsuffix, αλλιώς επιστρέφειFalse. Τοsuffix μπορεί επίσης να είναι ένα tuple (πλειάδα) από επιθέματα που πρέπει να αναζητηθούν. Με το προαιρετικόstart, το τεστ αρχίζει από αυτή τη θέση. Με το προαιρετικόend, η σύγκριση σταματά σε αυτή τη θέση.

str.expandtabs(tabsize=8)

Επιστρέφει ένα αντίγραφο της συμβολοσειράς (string) όπου όλοι οι χαρακτήρες tab αντικαθίστανται από έναν ή περισσότερα κενά, ανάλογα με την τρέχουσα στήλη και το δεδομένο μέγεθος των tabs. Οι θέσεις tab εμφανίζονται κάθεtabsize χαρακτήρες (το default είναι 8, δίνοντας tab θέσεις στις στήλες 0, 8, 16 κ.ο.κ.). Για την επέκταση της συμβολοσειράς, η τρέχουσα στήλη μηδενίζεται και η συμβολοσειρά εξετάζεται χαρακτήρας προς χαρακτήρα. Εάν ο χαρακτήρας είναι tab (\t), εισάγονται ένας ή περισσότεροι χαρακτήρες κενών στο αποτέλεσμα μέχρι η τρέχουσα στήλη να είναι ίση με την επόμενη θέση tab. (Ο ίδιος ο χαρακτήρας tab δεν αντιγράφεται.) Εάν ο χαρακτήρας είναι νέα γραμμή (\n) ή return (\r), αντιγράφεται και η τρέχουσα στήλη επαναφέρεται στο μηδέν. Οποιοσδήποτε άλλος χαρακτήρας αντιγράφεται αμετάβλητος και η τρέχουσα στήλη αυξάνεται κατά ένα, ανεξάρτητα από τον τρόπο αναπαράστασης του χαρακτήρα όταν τυπώνεται.

>>>'01\t012\t0123\t01234'.expandtabs()'01      012     0123    01234'>>>'01\t012\t0123\t01234'.expandtabs(4)'01  012 0123    01234'
str.find(sub[,start[,end]])

Επιστρέφει τον χαμηλότερο δείκτη στη συμβολοσειρά (string) όπου η υπό-συμβολοσειράsub βρίσκεται μέσα στο υποσύνολο (slice)s[start:end]. Τα προαιρετικά ορίσματαstart καιend ερμηνεύονται όπως στο notation του υποσυνόλου. Επιστρέφει-1 αν δεν βρεθεί τοsub.

Σημείωση

Η μέθοδοςfind() θα πρέπει να χρησιμοποιείται μόνο αν πρέπει να γνωρίζετε τη θέση τουsub. Για να ελέγξετε αν τοsub είναι υποσύνολο ή όχι, χρησιμοποιήστε τον τελεστήin:

>>>'Py'in'Python'True
str.format(*args,**kwargs)

Εκτέλεση μιας λειτουργίας μορφοποίησης συμβολοσειράς (string formatting). Η συμβολοσειρά στην οποία αυτή η μέθοδος καλείται μπορεί να περιέχει κυριολεκτικό κείμενο ή πεδία αντικατάστασης που οριοθετούνται από αγκύλες{}. Κάθε πεδίο αντικατάστασης περιέχει είτε τον αριθμητικό δείκτη ενός ορίσματος θέσης, είτε το όνομα ενός keyword ορίσματος. Επιστρέφει ένα αντίγραφο της συμβολοσειράς όπου κάθε πεδίο αντικατάστασης αντικαθίσταται με την τιμή της συμβολοσειράς του αντίστοιχου ορίσματος.

>>>"The sum of 1 + 2 is{0}".format(1+2)'The sum of 1 + 2 is 3'

Δείτε τοFormat String Syntax για μια περιγραφή των διαφόρων επιλογών μορφοποίησης που μπορούν να καθοριστούν στην μορφοποίηση συμβολοσειρών (format strings).

Σημείωση

Κατά τη μορφοποίηση ενός αριθμού (int,float,complex,decimal.Decimal και υποκλάσεις) με τον τύποn (π.χ.:'{:n}'.format(1234), η συνάρτηση θέτει προσωρινά την τοποθεσίαLC_CTYPE στην τοποθεσίαLC_NUMERIC για την αποκωδικοποίηση τωνdecimal_point καιthousands_sep πεδίων τουlocaleconv() αν είναι μη ASCII ή μεγαλύτερα από 1 byte, και το localeLC_NUMERIC είναι διαφορετικό από το localeLC_CTYPE. Αυτή η προσωρινή αλλαγή επηρεάζει και άλλα νήματα (threads).

Άλλαξε στην έκδοση 3.7:Κατά τη μορφοποίηση ενός αριθμού με τον τύποn, η συνάρτηση θέτει προσωρινά το localeLC_CTYPE στο localeLC_NUMERIC σε κάποιες περιπτώσεις.

str.format_map(mapping,/)

Παρόμοιο με τοstr.format(**mapping), εκτός από το ότι χρησιμοποιείται τοmapping απευθείας και δεν αντιγράφεται σε μιαdict. Αυτό είναι χρήσιμο αν για παράδειγμα τοmapping είναι μια υποκλάση του dict:

>>>classDefault(dict):...def__missing__(self,key):...returnkey...>>>'{name} was born in{country}'.format_map(Default(name='Guido'))'Guido was born in country'

Added in version 3.2.

str.index(sub[,start[,end]])

Όπως ηfind(), αλλά κάνει raiseValueError όταν η υπό-συμβολοσειρά (substring) δεν έχει βρεθεί.

str.isalnum()

ΕπιστρέφειTrue αν όλοι οι χαρακτήρες στη συμβολοσειρά (string) είναι αλφαριθμητικοί και υπάρχει τουλάχιστον ένας χαρακτήρας, διαφορετικάFalse. Ένας χαρακτήραςc είναι αλφαριθμητικό εάν ένα από τα ακόλουθα επιστρέφειTrue:c.isalpha(),c.isdecimal(),c.isdigit(), ήc.isnumeric().

str.isalpha()

ΕπιστρέφειTrue αν όλοι οι χαρακτήρες στη συμβολοσειρά (string) είναι αλφαβητικοί και υπάρχει τουλάχιστον ένας χαρακτήρας, διαφορετικάFalse. Οι αλφαβητικοί χαρακτήρες είναι χαρακτήρες που ορίζονται στη βάση δεδομένων χαρακτήρων Unicode ως «Letter», δηλαδή, εκείνοι με General Category ιδιότητα μία από τα «Lm», «Lt», «Lu», «Ll», ή «Lo». Σημειώστε ότι αυτό είναι διαφορετικό από τοΑλφαβητικό που ορίζεται στην ενότητα 4.10 “Letters, Alphabetic, and Ideographic” του προτύπου Unicode.

str.isascii()

ΕπιστρέφειTrue εάν η συμβολοσειρά (string) είναι κενή ή όλοι οι χαρακτήρες της συμβολοσειράς είναι ASCII, αλλιώςFalse. Οι χαρακτήρες ASCII έχουν σημεία κωδικοποίησης στην περιοχή U+0000-U+007F.

Added in version 3.7.

str.isdecimal()

ΕπιστρέφειTrue αν όλοι οι χαρακτήρες στη συμβολοσειρά (string) είναι δεκαδικοί χαρακτήρες και υπάρχει τουλάχιστον ένας χαρακτήρας, διαφορετικάFalse. Οι δεκαδικοί χαρακτήρες είναι αυτοί που μπορούν να χρησιμοποιηθούν για το σχηματισμό αριθμών στη βάση 10, π.χ. U+0660, ARABIC-INDIC DIGIT ZERO. Επίσημα ένας δεκαδικός χαρακτήρας είναι ένας χαρακτήρας του Unicode General Category «Nd».

str.isdigit()

ΕπιστρέφειTrue αν όλοι οι χαρακτήρες στη συμβολοσειρά είναι ψηφία και υπάρχει τουλάχιστον ένας χαρακτήρας, διαφορετικάFalse. Τα ψηφία περιλαμβάνουν δεκαδικούς χαρακτήρες και ψηφία που χρειάζονται ειδικό χειρισμό, όπως τα compatibility superscript ψηφία. Αυτό καλύπτει τα ψηφία που δεν μπορούν να χρησιμοποιηθούν για το σχηματισμό αριθμών στη βάση 10, όπως οι αριθμοί Kharosthi. Τυπικά, ένα ψηφίο είναι ένας χαρακτήρας που έχει την τιμή της ιδιότητας Numeric_Type=Digit ή Numeric_Type=Decimal.

str.isidentifier()

ΕπιστρέφειTrue αν η συμβολοσειρά είναι έγκυρο αναγνωριστικό σύμφωνα με το ορισμό της γλώσσας, ενότηταIdentifiers and keywords.

τοkeyword.iskeyword() μπορεί να χρησιμοποιηθεί για να ελέγξει αν η συμβολοσειράs είναι ένα δεσμευμένο αναγνωριστικό, όπως ταdef καιclass.

Παράδειγμα

>>>fromkeywordimportiskeyword>>>'hello'.isidentifier(),iskeyword('hello')(True, False)>>>'def'.isidentifier(),iskeyword('def')(True, True)
str.islower()

ΕπιστρέφειTrue αν όλοι οι χαρακτήρες[4] στο αλφαριθμητικό (string) είναι πεζοί και υπάρχει τουλάχιστον ένας cased χαρακτήρας, αλλιώςFalse.

str.isnumeric()

ΕπιστρέφειTrue αν όλοι οι χαρακτήρες στη συμβολοσειρά είναι αριθμητικοί (numeric) χαρακτήρες, και υπάρχει τουλάχιστον ένας χαρακτήρας, διαφορετικάFalse. Οι αριθμητικοί χαρακτήρες περιλαμβάνουν ψηφιακούς χαρακτήρες και όλους τους χαρακτήρες που έχουν την αριθμητική τιμή, π.χ. U+2155, VULGAR FRACTION ONE FIFTH. Τυπικά, οι αριθμητικοί χαρακτήρες είναι εκείνοι με την τιμή της ιδιότητας Numeric_Type=Digit, Numeric_Type=Decimal ή Numeric_Type=Numeric.

str.isprintable()

ΕπιστρέφειTrue αν όλοι οι χαρακτήρες στη συμβολοσειρά μπορούν να εκτυπωθούν,False εάν περιέχει τουλάχιστον έναν μη εκτυπώσιμο χαρακτήρα.

Εδώ «εκτυπώσιμος» σημαίνει ότι ο χαρακτήρας είναι κατάλληλος για τηνrepr() για χρήση στην έξοδο του∙ το «μη εκτυπώσιμος» σημαίνει ότι ο χαρακτήρας στηrepr() στους ενσωματωμένους τύπους θα διαφεύγει εξαγωνικά από τον χαρακτήρα. Δεν έχει καμία σχέση με τον χειρισμό συμβολοσειρών που γράφονται σεsys.stdout ήsys.stderr.

Οι εκτυπώσιμοι χαρακτήρες είναι αυτοί που στη βάση δεδομένων χαρακτήρων Unicode (βλ.unicodedata) έχουν μια γενική κατηγορία στην ομάδα Γράμμα, Σήμα, Αριθμός, Σημεία στίξης ή Σύμβολο (L, M, N, P ή S), συν το διάστημα ASCII 0x20. Οι μη εκτυπώσιμοι χαρακτήρες είναι αυτοί που βρίσκονται στο χώρο Διαχωρισμού ομάδας ή Άλλο (Z ή CII).

str.isspace()

ΕπιστρέφειTrue αν υπάρχουν μόνο χαρακτήρες κενού (whitespace) στο αλφαριθμητικό (string) και υπάρχει τουλάχιστον ένας χαρακτήρας, διαφορετικάFalse.

Ένας χαρακτήρας είναιwhitespace εάν στη βάση δεδομένων χαρακτήρων Unicode (βλέπεunicodedata), είτε η γενική κατηγορία του είναιZs («Separator, space»), είτε η αμφίδρομη κατηγορία του είναι μία από τις κατηγορίεςWS,B, ήS.

str.istitle()

ΕπιστρέφειTrue αν η συμβολοσειρά (string) είναι μια titlecased συμβολοσειρά και υπάρχει τουλάχιστον ένας χαρακτήρας, για παράδειγμα, οι κεφαλαίοι χαρακτήρες μπορούν να ακολουθούν μόνο τους uncased χαρακτήρες και οι πεζοί χαρακτήρες μόνο cased χαρακτήρες. Διαφορετικά, επιστρέφειFalse.

str.isupper()

ΕπιστρέφειTrue αν όλοι οι χαρακτήρες[4] στο αλφαριθμητικό είναι κεφαλαίοι και υπάρχει τουλάχιστον ένας cased χαρακτήρας, διαφορετικάFalse.

>>>'BANANA'.isupper()True>>>'banana'.isupper()False>>>'baNana'.isupper()False>>>' '.isupper()False
str.join(iterable)

Επιστρέφει μια συμβολοσειρά (string) που είναι η συνένωση των συμβολοσειρών στοiterable. ΈναTypeError θα γίνει raise αν υπάρχουν τιμές μη συμβολοσειράς (non-string) στοiterable, συμπεριλαμβανομένων των αντικειμένωνbytes. Το διαχωριστικό μεταξύ των στοιχείων είναι η συμβολοσειρά που παρέχει αυτή η μέθοδος.

str.ljust(width[,fillchar])

Επιστρέφει τη συμβολοσειρά (string) με αριστερή ευθυγράμμιση σε μια συμβολοσειρά μήκουςwidth. Το padding γίνεται με τη χρήση του καθορισμένουfillchar (το default είναι ένα κενό ASCII). Η αρχική συμβολοσειρά επιστρέφεται εάν τοwidth είναι μικρότερο ή ίσο με τοlen(s).

str.lower()

Επιστρέφει ένα αντίγραφο της συμβολοσειράς (string) με όλους τους cased χαρακτήρες[4] να έχουν μετατραπεί σε πεζούς.

Ο αλγόριθμος που χρησιμοποιείται για την πεζογράμμισηπεριγράφεται στην ενότητα 3.13 “Default Case Folding” του προτύπου Unicode.

str.lstrip([chars])

Επιστρέφει ένα αντίγραφο της συμβολοσειράς (string) με την αφαίρεση των αρχικών χαρακτήρων. Ταchars είναι μια συμβολοσειρά που καθορίζει το σύνολο των χαρακτήρων που πρέπει να αφαιρεθούν. Εάν παραλειφθεί ή είναιNone, το όρισμαchars έχει ως default την αφαίρεση των κενών χαρακτήρων. Το όρισμαchars δεν είναι ένα πρόθεμα· οπότε, όλοι οι συνδυασμοί των τιμών του αφαιρούνται:

>>>'   spacious   '.lstrip()'spacious   '>>>'www.example.com'.lstrip('cmowz.')'example.com'

Δείτε τηνstr.removeprefix() για μια μέθοδο που θα αφαιρέσει ένα μόνο πρόθεμα συμβολοσειράς (string) αντί για όλο το σύνολο των χαρακτήρων. Για παράδειγμα:

>>>'Arthur: three!'.lstrip('Arthur: ')'ee!'>>>'Arthur: three!'.removeprefix('Arthur: ')'three!'
staticstr.maketrans(x[,y[,z]])

Αυτή η στατική μέθοδος επιστρέφει έναν πίνακα μεταφράσεων που μπορεί να χρησιμοποιηθεί για τοstr.translate().

Εάν υπάρχει μόνο ένα όρισμα, πρέπει να είναι ένα λεξικό αντιστοίχισης Unicode ordinals (ακέραιοι αριθμοί) ή χαρακτήρες (συμβολοσειρές - strings μήκους 1) σε ordinals Unicode, συμβολοσειρές (αυθαίρετου μήκους) ήNone. Τα κλειδιά χαρακτήρων τότε θα μετατραπούν σε κανονικούς αριθμούς.

Εάν υπάρχουν δύο ορίσματα, πρέπει να είναι συμβολοσειρές (strings) ίσου μήκους και στο λεξικό (dictionary) που θα προκύψει, κάθε χαρακτήρας στο x θα αντιστοιχιστεί στο χαρακτήρα στην ίδια θέση στο y. Αν υπάρχει τρίτο όρισμα, πρέπει να είναι συμβολοσειρά, του οποίου οι χαρακτήρες θα αντιστοιχιστούν στο αποτέλεσμα σεNone.

str.partition(sep)

Διαχωρίστε τη συμβολοσειρά (string) στην πρώτη εμφάνιση τουsep, και επιστρέφει ένα 3-tuple που περιέχει το μέρος πριν από το διαχωριστικό, το ίδιο το διαχωριστικό και το μέρος μετά το διαχωριστικό. Αν ο διαχωριστής δεν βρεθεί, επιστρέφει ένα 3-σύνολο που περιέχει την ίδια τη συμβολοσειρά, ακολουθούμενη από δύο κενές συμβολοσειρές.

str.removeprefix(prefix,/)

Εάν η συμβολοσειρά (string) ξεκινά με τοprefix, επιστρέφειstring[len(prefix):]. Διαφορετικά, επιστρέφει ένα αντίγραφο της αρχικής συμβολοσειράς:

>>>'TestHook'.removeprefix('Test')'Hook'>>>'BaseTestCase'.removeprefix('Test')'BaseTestCase'

Added in version 3.9.

str.removesuffix(suffix,/)

Αν η συμβολοσειρά τελειώνει με τοsuffix και τοsuffix δεν είναι κενό, επιστρέφειstring[:-len(suffix)]. Διαφορετικά, επιστρέφει ένα αντίγραφο της αρχικής συμβολοσειράς:

>>>'MiscTests'.removesuffix('Tests')'Misc'>>>'TmpDirMixin'.removesuffix('Tests')'TmpDirMixin'

Added in version 3.9.

str.replace(old,new,count=-1)

Επιστρέφει ένα αντίγραφο της συμβολοσειράς (string) με όλες τις εμφανίσεις της υπό-συμβολοσειράςold αντικατεστημένες από τηνnew. Εάν δοθεί η παράμετροςcount, μόνο οι πρώτεςcount εμφανίσεις. Αν δεν έχει οριστεί ή είναι -1, τότε αντικαθίστανται όλες οι εμφανίσεις.

Άλλαξε στην έκδοση 3.13:Τοcount υποστηρίζεται πλέον ως όρισμα λέξης-κλειδιού.

str.rfind(sub[,start[,end]])

Επιστρέφει το υψηλότερο index στη συμβολοσειρά (string) όπου βρίσκεται η υπό-συμβολοσειράsub, έτσι ώστε τοsub περιέχεται στοs[start:end]. Τα προαιρετικά ορίσματαstart καιend ερμηνεύονται ως slice notation. Επιστρέφει-1 σε περίπτωση αποτυχίας.

str.rindex(sub[,start[,end]])

Όπως ηrfind(), αλλά κάνει raiseValueError όταν η υπό-συμβολοσειρά (sub-string)sub δεν βρέθηκε.

str.rjust(width[,fillchar])

Επιστρέφει τη συμβολοσειρά (string) με δεξιό προσανατολισμό σε μια συμβολοσειρά μήκουςwidth. Το padding γίνεται χρησιμοποιώντας το καθορισμένοfillchar (η προεπιλογή είναι ένα διάστημα ASCII). Η αρχική συμβολοσειρά επιστρέφεται εάν τοwidth είναι μικρότερο ή ίσο μεlen(s).

str.rpartition(sep)

Διαχωρίζει τη συμβολοσειρά (string) στην τελευταία εμφάνιση τουsep και επιστρέφει ένα 3-tuple που περιέχει το τμήμα πριν από το διαχωριστικό, το ίδιο το διαχωριστικό και το μέρος μετά το διαχωριστικό. Εάν το διαχωριστικό δεν βρεθεί, επιστρέφει ένα 3-tuple που περιέχει δύο κενές συμβολοσειρές, ακολουθούμενες από την ίδια τη συμβολοσειρά.

str.rsplit(sep=None,maxsplit=-1)

Επιστρέφει μια λίστα με τις λέξεις στη συμβολοσειρά (string), χρησιμοποιώντας τοsep ως οριοθέτη. Εάν δοθεί τοmaxsplit, θα γίνουν το πολύmaxsplit διαχωρισμοί, ξεκινώντας από τα δεξιά. Εάν τοsep δεν έχει καθοριστεί ή είναιNone, οποιοδήποτε κενό διάστημα γίνεται διαχωριστικό. Εκτός από το διαχωρισμό από τα δεξιά, ηrsplit() συμπεριφέρεται όπως ηsplit() που περιγράφεται λεπτομερώς παρακάτω.

str.rstrip([chars])

Επιστρέφει ένα αντίγραφο της συμβολοσειράς (string) με τους χαρακτήρες που έχουν αφαιρεθεί. Τα όρισμαchars είναι μια συμβολοσειρά που καθορίζει το σύνολο των χαρακτήρων που πρέπει να αφαιρεθούν. Εάν παραληφθεί ή είναιNone, το όρισμαchars έχει ως προεπιλογή την αφαίρεση των κενών διαστημάτων. Το όρισμαchars δεν είναι suffix, αλλά όλοι οι συνδυασμοί των τιμών του αφαιρούνται:

>>>'   spacious   '.rstrip()'   spacious'>>>'mississippi'.rstrip('ipz')'mississ'

Δείτε τηstr.removesuffix() για μια μέθοδο που θα αφαιρέσει ένα απλό suffix αντί για όλο το σύνολο των χαρακτήρων. Για παράδειγμα:

>>>'Monty Python'.rstrip(' Python')'M'>>>'Monty Python'.removesuffix(' Python')'Monty'
str.split(sep=None,maxsplit=-1)

Επιστρέφει μια λίστα με τις λέξεις της συμβολοσειράς (string), χρησιμοποιώντας τοsep ως διαχωριστικό. Αν δοθεί τοmaxsplit, γίνονται το πολύmaxsplit διαχωρισμοί (έτσι, η λίστα θα έχει το πολύmaxsplit+1 στοιχεία). Εάν τοmaxsplit δεν καθοριστεί ή είναι-1, τότε δεν υπάρχει όριο στον αριθμό των διαχωρισμών (γίνονται όλες οι πιθανές διασπάσεις).

Αν δοθεί τοsep, οι διαδοχικά οριοθέτες δεν ομαδοποιούνται μαζί και θεωρείται ότι οριοθετούν κενές συμβολοσειρές (strings) (για παράδειγμα, το'1,,2'.split(',') επιστρέφει['1','','2']). Το όρισμαsep μπορεί να αποτελείται από πολλούς χαρακτήρες ως μεμονωμένο οριοθέτη (για διαχωρισμό με πολλαπλούς οριοθέτες, χρησιμοποιήστε τηνre.split()). Ο διαχωρισμός μιας κενής συμβολοσειράς με ένα καθορισμένο διαχωριστικό επιστρέφει το[''].

Για παράδειγμα:

>>>'1,2,3'.split(',')['1', '2', '3']>>>'1,2,3'.split(',',maxsplit=1)['1', '2,3']>>>'1,2,,3,'.split(',')['1', '2', '', '3', '']>>>'1<>2<>3<4'.split('<>')['1', '2', '3<4']

Αν τοsep καθοριστεί ή είναιNone, εφαρμόζεται ένας διαφορετικός αλγόριθμος διαχωρισμού: οι εμφανίσεις διαδοχικών κενών θεωρούνται ως ένα ενιαίο διαχωριστικό, και το αποτέλεσμα δεν θα περιέχει κενές συμβολοσειρές (strings) στην αρχή ή στο τέλος, αν η συμβολοσειρά έχει κενό διάστημα στην αρχή ή στο τέλος. Κατά συνέπεια, η διάσπαση μιας κενής συμβολοσειράς ή μιας συμβολοσειράς που αποτελείται μόνο από κενά διαστήματα με έναNone ως διαχωριστικό επιστρέφει[].

Για παράδειγμα:

>>>'1 2 3'.split()['1', '2', '3']>>>'1 2 3'.split(maxsplit=1)['1', '2 3']>>>'   1   2   3   '.split()['1', '2', '3']
str.splitlines(keepends=False)

Επιστρέφει μια λίστα με τις γραμμές της συμβολοσειράς (string), διαχωρίζοντας στα όρια των γραμμών. Τα διαχωριστικά των γραμμών δεν περιλαμβάνονται στην νέα λίστα, εκτός αν δοθεί τοkeepends και είναι true.

Αυτή η μέθοδος διαχωρίζει στα ακόλουθα όρια γραμμών. Πιο συγκεκριμένα, τα όρια είναι ένα υπερσύνολο τουuniversal newlines.

Αναπαράσταση

Περιγραφή

\n

Line Feed

\r

Carriage Return

\r\n

Carriage Return + Line Feed

\v or\x0b

Line Tabulation

\f or\x0c

Form Feed

\x1c

Διαχωριστής Αρχείου

\x1d

Διαχωριστής Group

\x1e

Διαχωριστής Εγγραφών

\x85

Επόμενη Γραμμή (C1 Control Code)

\u2028

Διαχωριστής Γραμμής

\u2029

Διαχωριστής Παραγράφου

Άλλαξε στην έκδοση 3.2:Τα\v και\f προστίθενται στην λίστα ορίων των γραμμών.

Για παράδειγμα:

>>>'ab c\n\nde fg\rkl\r\n'.splitlines()['ab c', '', 'de fg', 'kl']>>>'ab c\n\nde fg\rkl\r\n'.splitlines(keepends=True)['ab c\n', '\n', 'de fg\r', 'kl\r\n']

Σε αντίθεση με τηνsplit() όταν δίνεται μια συμβολοσειρά (string) οριοθέτησηςsep, αυτή η μέθοδος επιστρέφει μια κενή λίστα για το κενό αλφαριθμητικό, και μια τερματικό break γραμμής δεν οδηγεί σε μια επιπλέον γραμμή:

>>>"".splitlines()[]>>>"One line\n".splitlines()['One line']

Συγκριτικά, ηsplit('\n') δίνει:

>>>''.split('\n')['']>>>'Two lines\n'.split('\n')['Two lines', '']
str.startswith(prefix[,start[,end]])

ΕπιστρέφειTrue αν η συμβολοσειρά (string) αρχίζει με τοprefix, αλλιώς επιστρέφειFalse. Τοprefix μπορεί επίσης να είναι μια πλειάδα (tuple) prefix προς αναζήτηση. Με το προαιρετικόstart, ελέγχεται το αλφαριθμητικό που αρχίζει από τη συγκεκριμένη θέση. Με το προαιρετικόend, σταματά η σύγκριση της συμβολοσειράς σε αυτή τη θέση.

str.strip([chars])

Επιστρέφει ένα αντίγραφο της συμβολοσειράς (string) με τους πρώτους και τους τελευταίους χαρακτήρες να έχουν αφαιρεθεί. Το όρισμαchars είναι μια συμβολοσειρά που καθορίζει το σύνολο των χαρακτήρων που πρέπει να αφαιρεθούν. Εάν παραλειφθεί ή είναιNone, το όρισμαchars έχει ως default την αφαίρεση των κενών διαστημάτων. Το όρισμαchars δεν είναι prefix ή suffix· μάλλον, όλοι οι συνδυασμοί των τιμών του αφαιρούνται:

>>>'   spacious   '.strip()'spacious'>>>'www.example.com'.strip('cmowz.')'example'

Οι ακραίες αρχικές και τελικές τιμές του ορίσματοςchars αφαιρούνται από τη συμβολοσειρά (string). Οι χαρακτήρες αφαιρούνται από το μπροστινό άκρο μέχρι να φτάσουν στο χαρακτήρα της συμβολοσειράς (string) που δεν περιέχεται στο σύνολο χαρακτήρων τουchars. Μια παρόμοια ενέργεια λαμβάνει χώρα στο τέλος της ουράς. Για παράδειγμα:

>>>comment_string='#....... Section 3.2.1 Issue #32 .......'>>>comment_string.strip('.#! ')'Section 3.2.1 Issue #32'
str.swapcase()

Επιστρέφει ένα αντίγραφο της συμβολοσειράς (string) με κεφαλαίους χαρακτήρες που έχουν μετατραπεί σε πεζούς και αντίστροφα. Σημειώστε ότι δεν είναι απαραίτητα αληθές ότιs.swapcase().swapcase()==s.

str.title()

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

Για παράδειγμα:

>>>'Hello world'.title()'Hello World'

Ο αλγόριθμος χρησιμοποιεί έναν απλό, ανεξάρτητο από τη γλώσσα, ορισμό μιας λέξης ως group διαδοχικών γραμμάτων. Ο ορισμός λειτουργεί σε πολλά contexts, αλλά σημαίνει ότι οι απόστροφοι σε συναιρέσεις και κτητικές λέξεις αποτελούν όρια λέξεων, που μπορεί να μην είναι το επιθυμητό αποτέλεσμα:

>>>"they're bill's friends from the UK".title()"They'Re Bill'S Friends From The Uk"

Η συνάρτησηstring.capwords() δεν έχει αυτό το πρόβλημα, καθώς χωρίζει τις λέξεις μόνο σε κενά.

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

>>>importre>>>deftitlecase(s):...returnre.sub(r"[A-Za-z]+('[A-Za-z]+)?",...lambdamo:mo.group(0).capitalize(),...s)...>>>titlecase("they're bill's friends.")"They're Bill's Friends."
str.translate(table)

Επιστρέφει ένα αντίγραφο της συμβολοσειράς (string) στο οποίο κάθε χαρακτήρας έχει αντιστοιχιστεί μέσω του πίνακα μετάφρασης. Ο πίνακας πρέπει να είναι ένα αντικείμενο που υλοποιεί ευρετηριοποίηση μέσω της__getitem__(), συνήθως έναmapping ή έναsequence. Όταν το indexing γίνεται με ένα Unicode ordinal (ένας ακέραιος), το αντικείμενο του πίνακα μπορεί να κάνει οποιοδήποτε από τα ακόλουθα: να επιστρέψει ένα Unicode ordinal ή μια συμβολοσειρά (string), να αντιστοιχίσει τον χαρακτήρα σε έναν ή περισσότερους άλλους χαρακτήρες· να επιστρέψειNone, για να διαγράψει τον χαρακτήρα από τη συμβολοσειρά που επιστρέφεται· ή να κάνει raise έναLookupError, για να αντιστοιχίσει τον χαρακτήρα στον εαυτό του.

Μπορείτε να χρησιμοποιήσετε τοstr.maketrans() για να δημιουργήσετε ένα χάρτη μετάφρασης αντιστοίχισης από χαρακτήρα-σε-χαρακτήρα σε διαφορετικές μορφές.

Δείτε επίσης την ενότηταcodecs για μια πιο ευέλικτη προσέγγιση σε προσαρμοσμένα mappings χαρακτήρων.

str.upper()

Επιστρέφει ένα αντίγραφο της συμβολοσειράς (string) με όλους τους χαρακτήρες[4] που έχουν μετατραπεί σε κεφαλαία. Σημειώστε ότι τοs.upper().isupper() μπορεί να είναιFalse αν τοs περιέχει χαρακτήρες χωρίς πεζά γράμματα ή αν η κατηγορία Unicode του προκύπτοντος χαρακτήρα(ων) δεν είναι «Lu» (Γράμμα, κεφαλαίο), αλλά π.χ. «Lt» (Γράμμα, titlecase).

Ο αλγόριθμος που κάνει τα γράμματα κεφαλαία που χρησιμοποιείταιπεριγράφεται στην ενότητα 3.13 “Default Case Folding” του προτύπου Unicode.

str.zfill(width)

Επιστρέφει ένα αντίγραφο της συμβολοσειράς (string) που έμεινε γεμάτη με ψηφία ASCII'0'` για να δημιουργήσει μία συμβολοσειρά μήκουςwidth. Χειρίζεται ένα leading sign prefix ('+'/'-') εισάγοντας την συμπλήρωσημετά τον χαρακτήρα sign αντί για πριν. Η αρχική συμβολοσειρά επιστρέφεται εάν τοwidth είναι μικρότερο ή ίσο μεlen(s).

Για παράδειγμα:

>>>"42".zfill(5)'00042'>>>"-42".zfill(5)'-0042'

Διαμορφωμένες Κυριολεκτικές Συμβολοσειρές (f-strings)

Added in version 3.6.

Άλλαξε στην έκδοση 3.7:Ταawait καιasyncfor μπορούν να χρησιμοποιηθούν σε εκφράσεις μέσα σε f-strings.

Άλλαξε στην έκδοση 3.8:Προστέθηκε ο τελεστής αποσφαλμάτωσης (=)

Άλλαξε στην έκδοση 3.12:Πολλοί περιορισμοί στις εκφράσεις μέσα σε f-strings έχουν αφαιρεθεί. Ιδιαίτερα, πλέον επιτρέπονται οι εμφωλευμένες συμβολοσειρές, τα σχόλια και οι κάθετοι.

Έναf-string (επίσημα έναformatted string literal) είναι μια κυριολεκτική συμβολοσειρά που προεξέχει μεf ήF. Αυτός ο τύπος κυριολεκτικής συμβολοσειράς επιτρέπει την ενσωμάτωση αυθαίρετων εκφράσεων Python μέσα σεπεδία αντικατάστασης, τα οποία περιβάλλονται από αγκύλες ({}). Αυτές οι εκφράσεις αξιολογούνται κατά την εκτέλεση, με παρόμοιο τρόπο όπως η μέθοδοςstr.format(), και μετατρέπονται σε κανονικά αντικείμενα τύπουstr. Για παράδειγμα:

>>>who='nobody'>>>nationality='Spanish'>>>f'{who.title()} expects the{nationality} Inquisition!''Nobody expects the Spanish Inquisition!'

Είναι επίσης δυνατό να χρησιμοποιηθεί μια f-string πολλών γραμμών:

>>>f'''This is a string...on two lines''''This is a string\non two lines'

Ένα μόνο άνοιγμα αγκύλης,'{', δηλώνει έναπεδίο αντικατάστασης που μπορεί να περιέχει οποιαδήποτε έκφραση Python:

>>>nationality='Spanish'>>>f'The{nationality} Inquisition!''The Spanish Inquisition!'

Για να συμπεριλάβετε μια κυριολεξία{ ή}, χρησιμοποιήστε διπλή αγκύλη:

>>>x=42>>>f'{{x}} is{x}''{x} is 42'

Μπορούν επίσης να χρησιμοποιηθούν συναρτήσεις καθώς καιformat specifiers:

>>>frommathimportsqrt>>>f'√2\N{ALMOST EQUAL TO}{sqrt(2):.5f}''√2 ≈ 1.41421'

Κάθε έκφραση μη-συμβολοσειράς μετατρέπεται χρησιμοποιώντας τηstr(), από προεπιλογή:

>>>fromfractionsimportFraction>>>f'{Fraction(1,3)}''1/3'

Για να χρησιμοποιήσετε ρητή μετατροπή, χρησιμοποιήστε τον τελεστή! (θαυμαστικό), ακολουθούμενο από οποιεσδήποτε από τις έγκυρες μορφές, τα οποία είναι:

Μετατροπή

Έννοια

!a

ascii()

!r

repr()

!s

str()

Για παράδειγμα:

>>>fromfractionsimportFraction>>>f'{Fraction(1,3)!s}''1/3'>>>f'{Fraction(1,3)!r}''Fraction(1, 3)'>>>question='¿Dónde está el Presidente?'>>>print(f'{question!a}')'\xbfD\xf3nde est\xe1 el Presidente?'

Κατά την αποσφαλμάτωση, μπορεί να είναι χρήσιμο να βλέπουμε τόσο την έκφραση όσο και την τιμή της, χρησιμοποιώντας το σύμβολο του ίσου (=) μετά την έκφραση. Αυτό διατηρεί τα κενά μέσα στις αγκύλες και μπορείς να χρησιμοποιηθεί με έναν μετατροπέα. Από προεπιλογή, ο χειριστής αποσφαλμάτωσης χρησιμοποιεί τη μετατροπήrepr() (!r). Για παράδειγμα:

>>>fromfractionsimportFraction>>>calculation=Fraction(1,3)>>>f'{calculation=}''calculation=Fraction(1, 3)'>>>f'{calculation= }''calculation = Fraction(1, 3)'>>>f'{calculation= !s}''calculation = 1/3'

Μόλις η έξοδος έχει αξιολογηθεί, μπορεί να μορφοποιηθεί χρησιμοποιώντας έναformat specifier που ακολουθείται από άνω και κάτω τελεία (':'). Αφού η έκφραση έχει αξιολογηθεί και, πιθανώς μετατραπεί σε συμβολοσειρά, καλείται η μέθοδος__format__() του αποτελέσματος με τον καθοριστή μορφοποίησης, ή η κενή συμβολοσειρά αν δεν έχει δοθεί καθοριστής μορφοποίησης. Το μορφοποιημένο αποτέλεσμα χρησιμοποιείται στη συνέχεια ως η τελική τιμή για το πεδίο αντικατάστασης. Για παράδειγμα:

>>>fromfractionsimportFraction>>>f'{Fraction(1,7):.6f}''0.142857'>>>f'{Fraction(1,7):_^+10}''___+1/7___'

printf-style String Formatting

Σημείωση

Οι λειτουργίες μορφοποίησης που περιγράφονται εδώ παρουσιάζουν μια ποικιλία ιδιορρυθμιών που οδηγούν σε έναν αριθμό κοινών σφαλμάτων (όπως η αποτυχία εμφάνισης tuple και σωστών λεξικών). Χρησιμοποιώντας τα νεότεραformatted string literals, τοstr.format() interface ή τοtemplate strings μπορεί να βοηθήσει στην αποφυγή αυτών των σφαλμάτων. Κάθε μία από αυτές τις εναλλακτικές παρέχει τους δικούς τις συμβιβασμούς και τα οφέλη της απλότητας, ευελιξίας και/ή επεκτασιμότητας.

Τα αντικείμενα string έχουν μια μοναδική ενσωματωμένη λειτουργία: τον τελεστή% (modulo). Αυτός είναι επίσης γνωστός ως τελεστήςformatting ή * interpolation*. Δεδομένων τωνformat%values (όπουformat είναι μία συμβολοσειρά),% οι προδιαγραφές μετατροπής στοformat αντικαθίστανται από μηδέν ή περισσότερα στοιχεία τωνvalues. Το αποτέλεσμα είναι παρόμοιο με τη χρήση τουsprintf() στη γλώσσα C. Για παράδειγμα:

>>>print('%s has%d quote types.'%('Python',2))Python has 2 quote types.

Εάν τοformat απαιτεί ένα μεμονωμένο όρισμα, τοvalues μπορεί να είναι ένα μεμονωμένο non-tuple αντικείμενο.[5] Διαφορετικά, ταvalues πρέπει να είναι ένα tuple με ακριβώς τον ίδιο αριθμό των στοιχείων που καθορίζονται από το format string ή ένα μεμονωμένο αντικείμενο αντιστοίχισης (για παράδειγμα, ένα λεξικό).

Ένας προσδιοριστής μετατροπής περιέχει δύο ή περισσότερους χαρακτήρες και έχει τους εξής components, οι οποίοι πρέπει να εμφανίζονται με αυτή τη σειρά:

  1. Ο χαρακτήρας`%'', που σηματοδοτεί την αρχή του προσδιοριστή.

  2. Κλειδί mapping (προαιρετικό), που αποτελείται από μια ακολουθία χαρακτήρων σε παρένθεση (για παράδειγμα,(somename)).

  3. Δείκτες μετατροπής (προαιρετικό), που επηρεάζουν το αποτέλεσμα κάποιων τύπων μετατροπής.

  4. Ελάχιστο πλάτος πεδίου (προαιρετικό). Εάν ορίζεται ως'*' (αστερίσκος), το πραγματικό πλάτος διαβάζεται από το επόμενο στοιχείο του tuple σταvalues, και το αντικείμενο προς μετατροπή έρχεται μετά από το ελάχιστο πλάτος πεδίου και το προαιρετικό precision.

  5. Ακρίβεια (προαιρετικό), δίνεται ως'.' (τελεία) ακολουθούμενη από το precision.Εάν ορίζεται ως'*' (αστερίσκος), το πραγματικό precision διαβάζεται από το επόμενο στοιχείο του tuple σταvalues, και η τιμή προς μετατροπή έρχεται μετά το precision.

  6. Μετατροπέας του length (προαιρετικό).

  7. Τύπος conversion.

Όταν το σωστό όρισμα είναι ένα λεξικό (ή άλλος τύπος αντιστοίχισης), τότε οι μορφές στη συμβολοσειράπρέπει να περιλαμβάνουν ένα κλειδί αντιστοίχισης σε παρένθεση σε αυτό το λεξικό που εισήχθη αμέσως μετά τον χαρακτήρα'%'. Το κλειδί αντιστοίχισης επιλέγει την τιμή που θα μορφοποιηθεί από την αντιστοίχιση. Για παράδειγμα:

>>>print('%(language)s has%(number)03d quote types.'%...{'language':"Python","number":2})Python has 002 quote types.

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

Οι δείκτες μετατροπής είναι:

Flag

Έννοια

'#'

Οι μετατροπή τιμής θα χρησιμοποιήσει την «εναλλακτική φόρμα» (όπου ορίζεται παρακάτω).

'0'

Η μετατροπή θα έχει μηδενική συμπλήρωση για αριθμητικές τιμές.

'-'

Η τιμή μετατροπής αφήνεται προσαρμοσμένη (παρακάμπτει τη μετατροπή'0' εάν δίνονται και τα δύο).

''

(ένα κενό) Πρέπει να προστεθεί ένα κενό πριν από έναν θετικό αριθμό (ή κενή συμβολοσειρά) που παράγεται από μια υπογεγραμμένη μετατροπή.

'+'

Ένα χαρακτήρας προσήμου ('+' ή'-') θα προηγείται της μετατροπής (παρακάμπτει ένα «κενό» δείκτη).

Ένας τροποποιητής μήκους (h,l, orL) μπορεί να υπάρχει, αλλά αγνοείται καθώς δεν είναι απαραίτητος για την Python – οπότε π.χ.%ld είναι πανομοιότυπο σε%d.

Οι τύποι μετατροπής είναι:

Μετατροπή

Έννοια

Σημειώσεις

'd'

Υπογεγραμμένος δεκαδικός ακέραιος.

'i'

Υπογεγραμμένος δεκαδικός ακέραιος.

'o'

Υπογεγραμμένη οκταδική τιμή.

(1)

'u'

Απαρχαιωμένος τύπος – είναι πανομοιότυπος με το'd'.

(6)

'x'

Υπογεγραμμένο δεκαεξαδικό (πεζά).

(2)

'X'

Υπογεγραμμένο δεκαεξαδικό (κεφαλαίο).

(2)

'e'

Εκθετική μορφή κινητής υποδιαστολής (πεζά)

(3)

'E'

Εκθετική μορφή κινητής υποδιαστολής (κεφαλαία)

(3)

'f'

Δεκαδική μορφή κινητής υποδιαστολής.

(3)

'F'

Δεκαδική μορφή κινητής υποδιαστολής.

(3)

'g'

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

(4)

'G'

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

(4)

'c'

Μεμονωμένος χαρακτήρας (δέχεται ακέραιο ή μονό χαρακτήρα συμβολοσειράς).

'r'

Συμβολοσειρά (μετατρέπει οποιοδήποτε αντικείμενο Python χρησιμοποιώνταςrepr()).

(5)

's'

Συμβολοσειρά (μετατρέπει οποιοδήποτε αντικείμενο Python χρησιμοποιώνταςstr()).

(5)

'a'

Συμβολοσειρά (μετατρέπει οποιοδήποτε αντικείμενο Python χρησιμοποιώνταςascii()).

(5)

'%'

Κανένα όρισμα δεν μετατρέπεται, έχει ως αποτέλεσμα έναν χαρακτήρα'%' το αποτέλεσμα.

Σημειώσεις:

  1. Η εναλλακτική μορφή προκαλεί την εισαγωγή ενός πρώτου οκταδικού προσδιοριστή ('0o') πριν από το πρώτο ψηφίο.

  2. Η εναλλακτική φόρμα προκαλεί την εισαγωγή ενός αρχικού'0x' ή'0X' (ανάλογα με το εάν χρησιμοποιήθηκε η μορφή'x' ή'X') πριν το πρώτο ψηφίο.

  3. Η εναλλακτική μορφή κάνει το αποτέλεσμα να περιέχει πάντα μια υποδιαστολή, ακόμα κι αν δεν ακολουθούν ψηφία.

    Η ακρίβεια καθορίζει τον αριθμό των ψηφίων μετά την υποδιαστολή και ορίζεται από προεπιλογή ως 6.

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

    Η ακρίβεια καθορίζει τον αριθμό των σημαντικών ψηφίων πριν και μετά την υποδιαστολή και ορίζει το 6.

  5. Εάν η ακρίβεια είναι``N``, η έξοδος περικόπτεται σεN χαρακτήρες.

  6. ΒλέπεPEP 237.

Δεδομένου ότι οι συμβολοσειρές Python έχουν ρητό μήκος, οι%s μετατροπές δεν υποθέτουν ότι το'\0' είναι το τέλος της συμβολοσειράς.

Άλλαξε στην έκδοση 3.1:Οι μετατροπείς%f για αριθμούς των οποίων η απόλυτη τιμή είναι μεγαλύτερη από 1e50 δεν αντικαθίστανται πλέον από μετατροπές%g.

Τύποι δυαδικής ακολουθίας —bytes,bytearray,memoryview

Οι βασικοί ενσωματωμένοι (built-in) τύποι για τον χειρισμό δυαδικών δεδομένων είναιbytes καιbytearray. Υποστηρίζονται από τηmemoryview που χρησιμοποιεί το πρωτόκολλοbuffer protocol για την πρόσβαση στη μνήμη άλλων δυαδικών αντικειμένων χωρίς να χρειάζεται η δημιουργία αντιγράφου.

Το modulearray υποστηρίζει αποδοτική αποθήκευση για βασικούς τύπους δεδομένων όπως 32-bit ακέραιους και IEEE754 διπλής ακρίβειας κινητής υποδιαστολής τιμές.

Αντικείμενα Bytes

Τα αντικείμενα bytes είναι αμετάβλητες ακολουθίες μεμονωμένων bytes. Δεδομένου ότι πολλά κύρια δυαδικά πρωτόκολλα βασίζονται στην κωδικοποίηση κειμένου ASCII, τα αντικείμενα bytes προσφέρουν διάφορες μεθόδους που ισχύουν μόνο όταν εργάζονται με δεδομένα συμβατά με ASCII και σχετίζονται στενά με αντικείμενα συμβολοσειρών σε μια ποικιλία διαφόρων τρόπων.

classbytes([source[,encoding[,errors]]])

Πρώτον, η σύνταξη για τα bytes literals είναι σε μεγάλο βαθμό η ίδια με αυτή για τα literals συμβολοσειρών, με τη διαφορά ότι προστίθεται ένα πρόθεμαb:

  • Μονά εισαγωγικά:b'ακόμαεπιτρέπειενσωματωμένα"διπλά"εισαγωγικά'

  • Διπλά εισαγωγικά:b"εξακολουθείναεπιτρέπειενσωματωμένα'μονά'εισαγωγικά"

  • Τριπλά εισαγωγικά:b'''3μονάεισαγωγικά''',b"""3διπλάεισαγωγικά"""

Επιτρέπονται μόνο χαρακτήρες ASCII σε bytes literals (ανεξάρτητα από τη δηλωμένη κωδικοποίηση του πηγαίου κώδικα). Τυχόν δυαδικές τιμές, πάνω από 127, πρέπει να εισαχθούν σε bytes literals χρησιμοποιώντας την κατάλληλη ακολουθία διαφυγής χαρακτήρων.

Όπως και με τα literals συμβολοσειρών, τα bytes literals μπορούν επίσης να χρησιμοποιήσουν ένα πρόθεμαr για να απενεργοποιήσουν την επεξεργασία των ακολουθιών διαφυγής χαρακτήρων. ΒλέπεString and Bytes literals για περισσότερες πληροφορίες σχετικά με τις διάφορες μορφές bytes literal, συμπεριλαμβανομένων των υποστηριζόμενων ακολουθιών διαφυγής χαρακτήρων.

Ενώ τα bytes literals και οι αναπαραστάσεις βασίζονται σε κείμενο ASCII, τα αντικείμενα bytes συμπεριφέρονται στην πραγματικότητα σαν αμετάβλητες ακολουθίες ακεραίων με κάθε τιμή στην ακολουθία περιορισμένη έτσι ώστε0<=x<256 (προσπάθειες παραβίασης αυτού του περιορισμού θα κάνουν raise τηνValueError). Αυτό γίνεται σκόπιμα για να τονιστεί ότι, ενώ πολλές δυαδικές μορφές περιλαμβάνουν στοιχεία που βασίζονται σε ASCII και μπορούν να χρησιμοποιηθούν χρήσιμα με ορισμένους αλγορίθμους προσανατολισμένους στο κείμενο, αυτό δεν ισχύει γενικά για αυθαίρετα δυαδικά δεδομένα (τυφλή εφαρμογή αλγορίθμων επεξεργασίας κειμένου σε δυαδικές μορφές δεδομένων που δεν είναι συμβατές με ASCII συνήθως οδηγεί σε καταστροφή δεδομένων).

Εκτός από τις literal μορφές, τα αντικείμενα bytes μπορούν να δημιουργηθούν με πολλούς άλλους τρόπους:

  • Ένα μηδενικό αντικείμενο bytes με καθορισμένο μήκος:bytes(10)

  • Από ένα iterable ακεραίων αριθμών:bytes(range(20))

  • Αντιγραφή υπαρχόντων δυαδικών δεδομένων μέσω του πρωτοκόλλου buffer:bytes(obj)

Δείτε επίσης το ενσωματωμένοbytes.

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

classmethodfromhex(string)

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

>>>bytes.fromhex('2Ef0 F1f2  ')b'.\xf0\xf1\xf2'

Άλλαξε στην έκδοση 3.7:Τοbytes.fromhex() παρακάμπτει πλέον όλα τα κενά ASCII στη συμβολοσειρά, όχι μόνο τα κενά.

Άλλαξε στην έκδοση 3.14:Ηbytes.fromhex() δέχεται πλέον ASCIIbytes καιbytes-like objects ως είσοδο.

Υπάρχει μια συνάρτηση αντίστροφης μετατροπής για τη μετατροπή ενός αντικειμένου bytes στην δεκαεξαδική του αναπαράσταση.

hex([sep[,bytes_per_sep]])

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

>>>b'\xf0\xf1\xf2'.hex()'f0f1f2'

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

>>>value=b'\xf0\xf1\xf2'>>>value.hex('-')'f0-f1-f2'>>>value.hex('_',2)'f0_f1f2'>>>b'UUDDLRLRAB'.hex(' ',-4)'55554444 4c524c52 4142'

Added in version 3.5.

Άλλαξε στην έκδοση 3.8:Ηbytes.hex() υποστηρίζει πλέον προαιρετικές παραμέτρουςsep καιbytes_per_sep για την εισαγωγή διαχωριστικών μεταξύ των byte στην έξοδο δεκαεξαδικού.

Δεδομένου ότι τα αντικείμενα bytes είναι ακολουθίες ακεραίων αριθμών (όμοια με μια πλειάδα (tuple)), για ένα αντικείμενο bytesb, τοb[0] θα είναι ένας ακέραιος αριθμός, ενώ τοb[0:1] θα είναι ένα αντικείμενο bytes μήκους 1. (Αυτό έρχεται σε αντίθεση με τις συμβολοσειρές κειμένου, όπου τόσο η λειτουργία πρόσβασης ως ευρετήριο όσο και η λειτουργία τμηματοποίησης θα παράγουν μια συμβολοσειρά μήκους 1)

Η αναπαράσταση αντικειμένων bytes χρησιμοποιεί την literal μορφή (b'...') , καθώς είναι συχνά πιο χρήσιμη από π.χ.bytes([46,46,46]). Μπορείτε πάντα να μετατρέψετε ένα αντικείμενο bytes σε μια λίστα ακέραιων αριθμών που χρησιμοποιούνlist(b).

Αντικείμενα Bytearray

Τα αντικείμεναbytearray είναι ένα μεταβλητό, αντίστοιχο, των αντικειμένωνbytes.

classbytearray([source[,encoding[,errors]]])

Δεν υπάρχει αποκλειστική literal σύνταξη για αντικείμενα bytearray, αντίθετα δημιουργούνται πάντα καλώντας τον constructor:

  • Δημιουργία ενός κενού στιγμιοτύπου:bytearray()

  • Δημιουργία μηδενικού στιγμιοτύπου με δεδομένο μήκος:bytearray(10)

  • Από έναν iterable αριθμό ακεραίων:bytearray(range(20))

  • Αντιγραφή υπαρχόντων δυαδικών δεδομένων μέσω του πρωτοκόλλου buffer:bytearray(b'Hi!')

Καθώς τα αντικείμενα του bytearray είναι μεταβλητά, υποστηρίζουν τις λειτουργίες της ακολουθίαςmutable επιπλέον των κοινών λειτουργιών bytes και bytearray που περιγράφονται στοΛειτουργίες Bytes και Bytearray.

Δείτε επίσης το ενσωματωμένοbytearray.

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

classmethodfromhex(string)

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

>>>bytearray.fromhex('2Ef0 F1f2  ')bytearray(b'.\xf0\xf1\xf2')

Άλλαξε στην έκδοση 3.7:Τοbytearray.fromhex() παρακάμπτει τώρα όλα τα κενά ASCII στη συμβολοσειρά, όχι μόνο τα κενά.

Άλλαξε στην έκδοση 3.14:Ηbytearray.fromhex() δέχεται πλέον το ASCIIbytes καιbytes-like objects ως είσοδο.

Υπάρχει μια συνάρτηση αντίστροφης μετατροπής για να μετατρέψει ένα αντικείμενο bytearray στη δεκαεξαδική αναπαράσταση του.

hex([sep[,bytes_per_sep]])

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

>>>bytearray(b'\xf0\xf1\xf2').hex()'f0f1f2'

Added in version 3.5.

Άλλαξε στην έκδοση 3.8:Παρόμοια με τοbytes.hex(), τοbytearray.hex() υποστηρίζει τώρα προαιρετικές παραμέτρουςsep καιbytes_per_sep για την εισαγωγή διαχωριστικών μεταξύ των byte στην δεκαεξαδική έξοδο.

resize(size)

Αλλάζει το μέγεθος τουbytearray ώστε αν περιέχειsize bytes. Τοsize πρέπει να είναι μεγαλύτερο ή ίσο με το 0.

Εάν ηbytearray χρειάζεται να συρρικνωθεί, τα bytes πέραν τουsize περικόπτονται.

Εάν ηbytearray χρειάζεται να αυξηθεί, όλα τα νέα bytes, αυτά που είναι πέρα από τοsize, θα οριστούν σε null bytes.

Ισοδύναμο με:

>>>defresize(ba,size):...iflen(ba)>size:...delba[size:]...else:...ba+=b'\0'*(size-len(ba))

Παραδείγματα:

>>>shrink=bytearray(b'abc')>>>shrink.resize(1)>>>(shrink,len(shrink))(bytearray(b'a'), 1)>>>grow=bytearray(b'abc')>>>grow.resize(5)>>>(grow,len(grow))(bytearray(b'abc\x00\x00'), 5)

Added in version 3.14.

Δεδομένου ότι τα αντικείμενα bytearray είναι ακολουθίες ακεραίων αριθμών (παρόμοια με μια λίστα), για ένα αντικείμενο bytearrayb, τοb[0] θα είναι ένας ακέραιος αριθμός, ενώ τοb[0:1] θα είναι ένα αντικείμενο bytearray μήκους 1. (Αυτό έρχεται σε αντίθεση με τις συμβολοσειρές κειμένου, όπου τόσο το indexing και το slicing θα παράγουν μια συμβολοσειρά μήκους 1)

Η αναπαράσταση αντικειμένων bytearray χρησιμοποιεί τη μορφή bytes literal (bytearray(b'...')), καθώς είναι συχνά πιο χρήσιμη από π.χ.bytearray([46,46,46]). Μπορείτε πάντα να μετατρέψετε ένα αντικείμενο bytearray σε λίστα ακεραίων χρησιμοποιώντας τοlist(b).

Λειτουργίες Bytes και Bytearray

Τόσο τα byte όσο και τα αντικείμενα του πίνακα byte υποστηρίζουν τις λειτουργίες της ακολουθίαςcommon. Αλληλεπιδρούν όχι μόνο με τελεστές του ίδιου τύπου, αλλά και με οποιοδήποτε αντικείμενοbytes-like object. Λόγω αυτής της ευελιξίας, μπορούν να αναμειχθούν ελεύθερα σε λειτουργίες χωρίς να προκαλούνται σφάλματα. Ωστόσο, ο τύπος επιστροφής του αποτελέσματος μπορεί να εξαρτάται από τη σειρά των τελεστών.

Σημείωση

Οι μέθοδοι στα bytes και τα αντικείμενα bytearray δεν δέχονται συμβολοσειρές ως ορίσματά τους, όπως και οι μέθοδοι σε συμβολοσειρές δεν δέχονται bytes ως ορίσματα. Για παράδειγμα, πρέπει να γράψετε:

a="abc"b=a.replace("a","f")

και:

a=b"abc"b=a.replace(b"a",b"f")

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

Σημείωση

Η χρήση αυτών των λειτουργιών βασίζονται στο ASCII για τον χειρισμό δυαδικών δεδομένων που δεν είναι αποθηκευμένα σε μορφή που βασίζεται σε ASCII μπορεί να οδηγήσει σε καταστροφή δεδομένων.

Οι ακόλουθες μέθοδοι σε byte και αντικείμενα bytearray μπορούν να χρησιμοποιηθούν με αυθαίρετα δυαδικά δεδομένα.

bytes.count(sub[,start[,end]])
bytearray.count(sub[,start[,end]])

Επιστρέφει τον αριθμό των μη επικαλυπτόμενων εμφανίσεων της δευτερεύουσας ακολουθίαςsub στο εύρος [start,end]. Τα προαιρετικά ορίσματαstart καιend ερμηνεύονται όπως στη σημειογραφία τμηματοποίησης.

Η υποακολουθία για αναζήτηση μπορεί να είναι οποιοδήποτεbytes-like object ή ένας ακέραιος αριθμός στην περιοχή από 0 έως 255.

Εάν τοsub είναι κενό, επιστρέφει τον αριθμό των κενών τμημάτων μεταξύ των χαρακτήρων που είναι το μήκος του αντικειμένου bytes συν ένα.

Άλλαξε στην έκδοση 3.3:Επίσης αποδέχεται έναν ακέραιο αριθμό στο εύρος 0 έως 255 ως υποακολουθία.

bytes.removeprefix(prefix,/)
bytearray.removeprefix(prefix,/)

Εάν τα δυαδικά δεδομένα ξεκινούν με τη συμβολοσειράprefix, επιστρέφειbytes[len(prefix):]. Διαφορετικά επιστρέψτε ένα αντίγραφο των αρχικών δυαδικών δεδομένων:

>>>b'TestHook'.removeprefix(b'Test')b'Hook'>>>b'BaseTestCase'.removeprefix(b'Test')b'BaseTestCase'

Τοprefix μπορεί να είναι οποιοδήποτεbytes-like object.

Σημείωση

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

Added in version 3.9.

bytes.removesuffix(suffix,/)
bytearray.removesuffix(suffix,/)

Εάν τα δυαδικά δεδομένα τελειώνουν με τη συμβολοσειράsuffix και αυτό τοsuffix δεν είναι κενό, επιστρέφειbytes[:-len(suffix)]. Διαφορετικά, επιστρέφει ένα αντίγραφο των αρχικών δυαδικών δεδομένων:

>>>b'MiscTests'.removesuffix(b'Tests')b'Misc'>>>b'TmpDirMixin'.removesuffix(b'Tests')b'TmpDirMixin'

Τοsuffix μπορεί να είναι οποιοδήποτεbytes-like object.

Σημείωση

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

Added in version 3.9.

bytes.decode(encoding='utf-8',errors='strict')
bytearray.decode(encoding='utf-8',errors='strict')

Επιστρέφει τα bytes που έχουν αποκωδικοποιηθεί σε μιαstr.

τοencoding έχει default σε'utf-8'- δείτεStandard Encodings για πιθανές τιμές.

Τοerrors ελέγχει τον τρόπο χειρισμού των σφαλμάτων αποκωδικοποίησης. Εάν'strict' (η προεπιλογή), γίνεται raise μια εξαίρεσηUnicodeError. Άλλες πιθανές τιμές είναι το'ignore','replace', και οποιοδήποτε άλλο όνομα που έχει καταχωρηθεί από τηνcodecs.register_error(). ΒλέπεError Handlers για λεπτομέρειες.

Για λόγους απόδοσης, η τιμή τουerrors δεν ελέγχεται ως προς την εγκυρότητα του, εκτός εάν παρουσιαστεί ένα σφάλμα αποκωδικοποίησης, είναι ενεργοποιημένο τοPython Development Mode ή χρησιμοποιείται έναdebug build.

Σημείωση

Η μετάδοση του ορίσματοςencoding στηνstr επιτρέπει την αποκωδικοποίηση οποιουδήποτεbytes-like object απευθείας, χωρίς να χρειάζεται να δημιουργήσετε ένα προσωρινό αντικείμενοbytes ήbytearray.

Άλλαξε στην έκδοση 3.1:Επιπρόσθετη υποστήριξη για keyword ορίσματα.

Άλλαξε στην έκδοση 3.9:Η τιμή του όρουerrors ελέγχεται τώρα στοPython Development Mode και στοdebug mode.

bytes.endswith(suffix[,start[,end]])
bytearray.endswith(suffix[,start[,end]])

ΕπιστρέφειTrue εάν τα δυαδικά δεδομένα τελειώνουν με το καθορισμένοsuffix, διαφορετικά επιστρέφειFalse. Τοsuffix μπορεί επίσης να είναι μια πλειάδα από επιθέματα που πρέπει να αναζητήσετε. Με το προαιρετικόstart, η δοκιμή ξεκινά από αυτή τη θέση. Με το προαιρετικόend, σταματήστε να συγκρίνετε σε αυτή τη θέση.

Το(α) επίθεμα(τα) για αναζήτηση μπορεί να είναι οποιοδήποτεbytes-like object.

bytes.find(sub[,start[,end]])
bytearray.find(sub[,start[,end]])

Επιστρέφει το χαμηλότερο index στα δεδομένα όπου βρίσκεται η υποακολουθίαsub, έτσι ώστε τοsub να περιέχεται στο slices[start:end]. Τα προαιρετικά ορίσματαstart καιend ερμηνεύονται ως συμβολισμό τμηματοποίησης. Επιστρέφει-1 εάν τοsub δεν βρεθεί.

Η υποακολουθία για αναζήτηση μπορεί να είναι οποιοδήποτεbytes-like object ή ένας ακέραιος αριθμός στην περιοχή από 0 έως 255.

Σημείωση

Η μέθοδοςfind() θα πρέπει να χρησιμοποιείται μόνο εάν χρειάζεται να γνωρίζετε τη θέση τουsub. Για να ελέγξετε εάν τοsub είναι υποσυμβολοσειρά ή όχι, χρησιμοποιήστε τον τελεστήin:

>>>b'Py'inb'Python'True

Άλλαξε στην έκδοση 3.3:Επίσης αποδέχεται έναν ακέραιο αριθμό στο εύρος 0 έως 255 ως υποακολουθία.

bytes.index(sub[,start[,end]])
bytearray.index(sub[,start[,end]])

Όπως ηfind(), αλλά κάνει raise μιαValueError όταν δεν βρεθεί η δευτερεύουσα ακολουθία.

Η υποακολουθία για αναζήτηση μπορεί να είναι οποιοδήποτεbytes-like object ή ένας ακέραιος αριθμός στην περιοχή από 0 έως 255.

Άλλαξε στην έκδοση 3.3:Επίσης αποδέχεται έναν ακέραιο αριθμό στο εύρος 0 έως 255 ως υποακολουθία.

bytes.join(iterable)
bytearray.join(iterable)

Επιστρέφει ένα αντικείμενο bytes ή bytearray που είναι η συνένωση των δυαδικών ακολουθιών δεδομένων στοiterable. ΜιαTypeError θα γίνει raise εάν υπάρχουν τιμές στοiterable που δεν είναι σανbytes-like objects, συμπεριλαμβανομένων των αντικειμένωνstr. Το διαχωριστικό μεταξύ των στοιχειών είναι τα περιεχόμενα των byte ή του αντικειμένου bytearray που παρέχει αυτή τη μέθοδο.

staticbytes.maketrans(from,to)
staticbytearray.maketrans(from,to)

Αυτή η στατική μέθοδος επιστρέφει έναν πίνακα μετάφρασης που μπορεί να χρησιμοποιηθεί για τηνbytes.translate() που θα αντιστοιχίσει κάθε χαρακτήρα στοfrom στον χαρακτήρα στην ίδια θέση στοto· ταfrom καιto πρέπει να είναι και τα δύοbytes-like objects και να έχουν το ίδιο μήκος.

Added in version 3.1.

bytes.partition(sep)
bytearray.partition(sep)

Διαχωρίζει την ακολουθία κατά την πρώτη εμφάνιση τουsep, και επιστρέφει μια 3-πλειάδα που περιέχει το τμήμα πριν από το διαχωριστικό ή το αντίγραφο του bytearray του και το τμήμα μετά το διαχωριστικό. Εάν δεν βρεθεί το διαχωριστικό, επιστρέφει μια 3-πλειάδα που περιέχει ένα αντίγραφο της αρχικής ακολουθίας, ακολουθούμενη από δύο κενά byte ή αντικείμενα bytearray.

Το διαχωριστικό για αναζήτηση μπορεί να είναι οποιοδήποτεbytes-like object.

bytes.replace(old,new[,count])
bytearray.replace(old,new[,count])

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

Η ακολουθία για αναζήτηση και αντικατάσταση της μπορεί να είναι οποιοδήποτεbytes-like object.

Σημείωση

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

bytes.rfind(sub[,start[,end]])
bytearray.rfind(sub[,start[,end]])

Επιστρέφει τον υψηλότερο δείκτη στην ακολουθία όπου βρίσκεται η υποακολουθίαsub, έτσι ώστε τοsub να περιέχεται στοs[start:end]. Τα προαιρετικά ορίσματαstart καιend ερμηνεύονται με συμβολισμό τμηματοποίησης. Επιστρέφει-1 σε περίπτωση αποτυχίας.

Η υποακολουθία για αναζήτηση μπορεί να είναι οποιοδήποτεbytes-like object ή ένας ακέραιος αριθμός στην περιοχή από 0 έως 255.

Άλλαξε στην έκδοση 3.3:Επίσης αποδέχεται έναν ακέραιο αριθμό στο εύρος 0 έως 255 ως υποακολουθία.

bytes.rindex(sub[,start[,end]])
bytearray.rindex(sub[,start[,end]])

Όπως ηrfind() αλλά κάνει raise μιαValueError όταν δεν βρεθεί η υποακολουθίαsub.

Η υποακολουθία για αναζήτηση μπορεί να είναι οποιοδήποτεbytes-like object ή ένας ακέραιος αριθμός στην περιοχή από 0 έως 255.

Άλλαξε στην έκδοση 3.3:Επίσης αποδέχεται έναν ακέραιο αριθμό στο εύρος 0 έως 255 ως υποακολουθία.

bytes.rpartition(sep)
bytearray.rpartition(sep)

Διαχωρίζει την ακολουθία στην τελευταία εμφάνιση τουsep, και επιστρέφει μια 3-πλειάδα που περιέχει το τμήμα πριν από το διαχωριστικό, το ίδιο το διαχωριστικό ή το αντίγραφο του bytearray και το τμήμα μετά το διαχωριστικό. Εάν δεν βρεθεί το διαχωριστικό επιστρέφει μια 3-πλειάδα που περιέχει δύο κενά byte ή αντικείμενα bytearray, ακολουθούμενα από ένα αντίγραφο της αρχικής ακολουθίας.

Το διαχωριστικό για αναζήτηση μπορεί να είναι οποιοδήποτεbytes-like object.

bytes.startswith(prefix[,start[,end]])
bytearray.startswith(prefix[,start[,end]])

ΕπιστρέφειTrue εάν τα δυαδικά δεδομένα ξεκινούν με το καθορισμένοprefix, διαφορετικά επιστρέφειFalse. Τοprefix μπορεί επίσης να είναι μια πλειάδα από προθέματα προς αναζήτηση. Με το προαιρετικόstart, η δοκιμή ξεκινά από αυτή τη θέση. Με το προαιρετικόend, σταματάει να συγκρίνει σε αυτή τη θέση.

Το(α) πρόθεμα(τα) για αναζήτηση μπορεί να είναι οποιοδήποτεbytes-like object.

bytes.translate(table,/,delete=b'')
bytearray.translate(table,/,delete=b'')

Επιστρέφει ένα αντίγραφο των bytes ή του αντικειμένου bytearray όπου αφαιρούνται όλα τα byte που εμφανίζονται στο προαιρετικό όρισμαdelete και τα υπόλοιπα byte έχουν αντιστοιχιστεί μέσω του δεδομένου πίνακα μετάφρασης, ο οποίος πρέπει να είναι ένα αντικείμενο bytes μήκους 256.

Μπορείτε να χρησιμοποιήσετε τη μέθοδοbytes.maketrans() για να δημιουργήσετε έναν πίνακα μετάφρασης.

Ορίζει το όρισμαtable σεNone για μεταφράσεις που διαγράφουν μόνο χαρακτήρες:

>>>b'read this short text'.translate(None,b'aeiou')b'rd ths shrt txt'

Άλλαξε στην έκδοση 3.6:Τοdelete υποστηρίζεται πλέον ως όρισμα λέξης-κλειδιού.

Οι ακόλουθες μέθοδοι σε byte και bytearray αντικείμενα έχουν προεπιλεγμένες συμπεριφορές που προϋποθέτουν τη χρήση δυαδικών μορφών συμβατών με ASCII, αλλά μπορούν να χρησιμοποιηθούν με αυθαίρετα δυαδικά δεδομένα περνώντας κατάλληλα ορίσματα. Σημειώστε ότι όλες οι μέθοδοι bytearray σε αυτήν την ενότηταδεν λειτουργούν στη θέση τους και όμως παράγουν νέα αντικείμενα.

bytes.center(width[,fillbyte])
bytearray.center(width[,fillbyte])

Επιστρέφει ένα αντίγραφο του αντικειμένου με κέντρο σε μια ακολουθία μήκουςwidth. Η συμπλήρωση πραγματοποιείται χρησιμοποιώντας το καθορισμένοfillbyte (η προεπιλογή είναι ένα διάστημα ASCII). Για αντικείμεναbytes,ηαρχικήακολουθίαεπιστρέφεταιεάντο*width*είναιμικρότεροήίσομε``len(s)`.

Σημείωση

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

bytes.ljust(width[,fillbyte])
bytearray.ljust(width[,fillbyte])

Επιστρέφει ένα αντίγραφο του αντικειμένου αριστερά ευθυγραμμισμένο σε μια ακολουθία μήκουςwidth. Η συμπλήρωση πραγματοποιείται χρησιμοποιώντας το καθορισμένοfillbyte (η προεπιλογή είναι ένα διάστημα ASCII). Για αντικείμεναbytes,ηαρχικήακολουθίαεπιστρέφεταιεάντο*width*είναιμικρότεροήίσομε``len(s)`.

Σημείωση

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

bytes.lstrip([chars])
bytearray.lstrip([chars])

Επιστρέφει ένα αντίγραφο της ακολουθίας με καθορισμένα βασικά byte που έχουν αφαιρεθεί. Το όρισμαchars είναι μια δυαδική ακολουθία που καθορίζει το σύνολο των τιμών byte που πρέπει να αφαιρεθούν - το όνομα αναφέρεται στο γεγονός ότι αυτή η μέθοδος χρησιμοποιείται συνήθως με χαρακτήρες ASCII. Εάν παραληφθεί ή είναιNone, το όρισμαchars έχει ως προεπιλογή την αφαίρεση του κενού διαστήματος ASCII. Το όρισμαchars δεν είναι πρόθεμα, αλλά οι συνδυασμοί των τιμών του αφαιρούνται:

>>>b'   spacious   '.lstrip()b'spacious   '>>>b'www.example.com'.lstrip(b'cmowz.')b'example.com'

Η δυαδική ακολουθία τιμών byte προς κατάργηση μπορεί να είναι οποιαδήποτεbytes-like object. Βλέπεremoveprefix() για μια μέθοδο που θα αφαιρέσει μια μεμονωμένη συμβολοσειρά προθέματος αντί όλο το σύνολο χαρακτήρων. Για παράδειγμα:

>>>b'Arthur: three!'.lstrip(b'Arthur: ')b'ee!'>>>b'Arthur: three!'.removeprefix(b'Arthur: ')b'three!'

Σημείωση

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

bytes.rjust(width[,fillbyte])
bytearray.rjust(width[,fillbyte])

Επιστρέφει ένα αντίγραφο του αντικειμένου ευθυγραμμισμένο δεξιά που δικαιολογείται σε μια ακολουθία μήκουςwidth. Η συμπλήρωση πραγματοποιείται χρησιμοποιώντας το καθορισμένοfillbyte (η προεπιλογή είναι ένα διάστημα ASCII). Για αντικείμεναbytes, η αρχική ακολουθία επιστρέφεται εάν τοwidth είναι μικρότερο ή ίσο μεlen(s).

Σημείωση

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

bytes.rsplit(sep=None,maxsplit=-1)
bytearray.rsplit(sep=None,maxsplit=-1)

Διαχωρίζει τη δυαδική ακολουθία σε υποακολουθίες του ίδιου τύπου, χρησιμοποιώντας τοsep ως συμβολοσειρά οριοθέτησης. Εάν δοθείmaxsplit, γίνονται το πολύmaxsplit διαχωρισμοί, οιrightmost. Εάν δεν καθορίζεταιsep ήNone, οποιαδήποτε υποακολουθία που αποτελείται αποκλειστικά από κενό διάστημα ASCII είναι διαχωριστικό, εκτός από το διαχωρισμό από τα δεξιά, ηrsplit() συμπεριφέρεται όπωςsplit() που περιγράφεται λεπτομερώς παρακάτω.

bytes.rstrip([chars])
bytearray.rstrip([chars])

Επιστρέφει ένα αντίγραφο της ακολουθίας με τα καθορισμένα δευτερεύοντα byte που έχουν αφαιρεθεί. Το όρισμαchars είναι μια δυαδική ακολουθία που καθορίζει το σύνολο των τιμών byte που πρέπει να αφαιρεθούν - το όνομα αναφέρεται στο γεγονός ότι αυτή η μέθοδος χρησιμοποιείται συνήθως με χαρακτήρες ASCII. Εάν παραληφθεί ή είναιNone, το όρισμαchars έχει ως προεπιλογή την αφαίρεση του κενού διαστήματος ASCII. Το όρισμαchars δεν είναι επίθημα, αλλά αφαιρούνται όλοι οι συνδυασμοί των τιμών του:

>>>b'   spacious   '.rstrip()b'   spacious'>>>b'mississippi'.rstrip(b'ipz')b'mississ'

Η δυαδική ακολουθία τιμών byte προς κατάργηση μπορεί να είναι οποιοδήποτεbytes-like object. Βλέπε τηremovesuffix() για μια μέθοδο που θα αφαιρέσει μια συμβολοσειρά επιθέματος και όχι όλο το σύνολο χαρακτήρων. Για παράδειγμα:

>>>b'Monty Python'.rstrip(b' Python')b'M'>>>b'Monty Python'.removesuffix(b' Python')b'Monty'

Σημείωση

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

bytes.split(sep=None,maxsplit=-1)
bytearray.split(sep=None,maxsplit=-1)

Διαχωρίζει την δυαδική ακολουθία σε υποακολουθίες του ίδιου τύπου, χρησιμοποιώντας τοsep ως συμβολοσειρά οριοθέτησης Εάν δοθείmaxsplit και μη αρνητικό, γίνονται το πολύmaxsplit διαχωρισμοί (άρα, η λίστα θα έχε το πολύmaxsplit+1 στοιχεία). Εάν τοmaxsplit δεν έχει καθοριστεί ή είναι-1, τότε δεν υπάρχει όριο στον αριθμό των διαχωρισμών (όλες οι πιθανές διασπάσεις γίνονται).

Αν δοθεί τοsep, οι διαδοχικοί οριοθέτες δεν ομαδοποιούνται και θεωρείται ότι οριοθετούν κενές υποακολουθίες (για παράδειγμα,b'1,,2'.split(b',') επιστρέφει το[b'1',b'',b'2']). Το όρισμαsep μπορεί να αποτελείται από μια ακολουθία πολλών byte ως μεμονωμένο οριοθέτη. Ο διαχωρισμός μιας κενής ακολουθίας με ένα καθορισμένο διαχωριστικό επιστρέφει το[b''] ή το[bytearray(b'')] ανάλογα με τον τύπο του αντικειμένου που χωρίζεται. Το όρισμαsep μπορεί να είναι οποιοδήποτεbytes-like object.

Για παράδειγμα:

>>>b'1,2,3'.split(b',')[b'1', b'2', b'3']>>>b'1,2,3'.split(b',',maxsplit=1)[b'1', b'2,3']>>>b'1,2,,3,'.split(b',')[b'1', b'2', b'', b'3', b'']>>>b'1<>2<>3<4'.split(b'<>')[b'1', b'2', b'3<4']

Εάν τοsep δεν έχει καθοριστεί ή είναιNone, εφαρμόζεται ένας διαφορετικός αλγόριθμος διαχωρισμού: οι εκτελέσεις διαδοχικών κενών διαστημάτων ASCII θεωρούνται ως ένα ενιαίο διαχωριστικό, και το αποτέλεσμα δεν θα περιέχει κενές συμβολοσειρές στην αρχή ή στο τέλος, εάν η ακολουθία έχει κενό που έπεται ή προηγείται. Κατά συνέπεια, ο διαχωρισμός μιας κενής ακολουθίας ή μιας ακολουθίας που αποτελείται αποκλειστικά από κενό διάστημα ASCII χωρίς καθορισμένο διαχωριστικό επιστρέφει το[].

Για παράδειγμα:

>>>b'1 2 3'.split()[b'1', b'2', b'3']>>>b'1 2 3'.split(maxsplit=1)[b'1', b'2 3']>>>b'   1   2   3   '.split()[b'1', b'2', b'3']
bytes.strip([chars])
bytearray.strip([chars])

Επιστρέφει ένα αντίγραφο της ακολουθίας με τα καθορισμένα bytes που προηγούνται και τα bytes που έπονται. Το όρισμαchars είναι μια δυαδική ακολουθία που καθορίζει το σύνολο των τιμών byte που πρέπει να αφαιρεθούν - το όνομα αναφέρεται στο γεγονός ότι αυτή η μέθοδος χρησιμοποιείται συνήθως με χαρακτήρες ASCII. Εάν παραλείπεται ή είναιNone, το όρισμαchars από προεπιλογή αφαιρεί το ASCII λευκό διάστημα. To όρισμαchars δεν είναι πρόθεμα ή επίθημα, αλλά αφαιρούνται όλοι οι συνδυασμοί των τιμών του:

>>>b'   spacious   '.strip()b'spacious'>>>b'www.example.com'.strip(b'cmowz.')b'example'

Η δυαδική ακολουθία τιμών byte προς αφαίρεση μπορεί να είναι οποιοδήποτεbytes-like object.

Σημείωση

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

Οι ακόλουθες μέθοδοι σε byte και αντικείμενα bytearray προϋποθέτουν τη χρήση δυαδικών μορφών συμβατών με ASCII και δεν πρέπει να εφαρμόζονται σε αυθαίρετα δυαδικά δεδομένα. Σημειώστε ότι όλες οι μέθοδοι bytearray σε αυτήν την ενότηταδεν λειτουργούν στη θέση τους και αντ” αυτού παράγουν νέα αντικείμενα.

bytes.capitalize()
bytearray.capitalize()

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

Σημείωση

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

bytes.expandtabs(tabsize=8)
bytearray.expandtabs(tabsize=8)

Επιστρέφει ένα αντίγραφο της ακολουθίας όπου όλοι οι tab χαρακτήρες ASCII αντικαθίστανται από ένα ή περισσότερα κενά ASCII, ανάλογα με την τρέχουσα στήλη και το δεδομένο μέγεθος tab. Οι θέσεις των tab εμφανίζονται κάθεtabsize bytes (η προεπιλογή είναι 8, δίνοντας θέσεις καρτελών στις στήλες 0, 8, 16 και ούτω καθεξής). Για την επέκταση της ακολουθίας, η τρέχουσα στήλη ορίζεται στο μηδέν και η ακολουθία εξετάζεται byte προς byte. Εάν το byte είναι tab χαρακτήρας ASCII (b'\t'), ένας ή περισσότεροι χαρακτήρες διαστήματος εισάγονται στο αποτέλεσμα έως ότου η τρέχουσα στήλη ισούται με την επόμενη θέση tab. (Ο ίδιος tab χαρακτήρας δεν αντιγράφεται.) Εάν το τρέχον byte είναι μια νέα γραμμή ASCII (b'\n'), αντιγράφεται και η τρέχουσα στήλη επαναφέρεται στο μηδέν. Οποιαδήποτε άλλη τιμή byte αντιγράφεται αμετάβλητη και η τρέχουσα στήλη προσαυξάνεται κατά ένα, ανεξάρτητα από το πώς αναπαρίσταται η τιμή byte όταν εκτυπώνεται:

>>>b'01\t012\t0123\t01234'.expandtabs()b'01      012     0123    01234'>>>b'01\t012\t0123\t01234'.expandtabs(4)b'01  012 0123    01234'

Σημείωση

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

bytes.isalnum()
bytearray.isalnum()

ΕπιστρέφειTrue εάν όλα τα byte της ακολουθίας είναι αλφαβητικοί χαρακτήρες ASCII ή ASCII δεκαδικά ψηφία και η ακολουθία δεν είναι κενή,False διαφορετικά. Οι αλφαβητικοί χαρακτήρες ASCII είναι εκείνες οι τιμές byte στην ακολουθίαb'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'. Τα δεκαδικά ψηφία ASCII είναι αυτές οι τιμές byte στην ακολουθίαb'0123456789'.

Για παράδειγμα:

>>>b'ABCabc1'.isalnum()True>>>b'ABC abc1'.isalnum()False
bytes.isalpha()
bytearray.isalpha()

ΕπιστρέφειTrue εάν όλα τα bytes της ακολουθίας είναι αλφαβητικοί χαρακτήρες ASCII και η ακολουθία δεν είναι κενή,False διαφορετικά. Οι αλφαβητικοί χαρακτήρες ASCII είναι εκείνες οι τιμές bytes στην ακολουθίαb'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'.

Για παράδειγμα:

>>>b'ABCabc'.isalpha()True>>>b'ABCabc1'.isalpha()False
bytes.isascii()
bytearray.isascii()

ΕπιστρέφειTrue εάν η ακολουθία είναι κενή ή όλα τα byte της ακολουθίας είναι ASCII,False διαφορετικά. Τα bytes ASCII βρίσκονται στο εύρος 0-0x7F.

Added in version 3.7.

bytes.isdigit()
bytearray.isdigit()

ΕπιστρέφειTrue εάν όλα τα bytes στην ακολουθία είναι δεκαδικά ψηφία ASCII και η ακολουθία δεν είναι κενή,False διαφορετικά. Τα δεκαδικά ψηφία ASCII είναι αυτές οι τιμές byte στην ακολουθίαb'0123456789'.

Για παράδειγμα:

>>>b'1234'.isdigit()True>>>b'1.23'.isdigit()False
bytes.islower()
bytearray.islower()

ΕπιστρέφειTrue εάν υπάρχει τουλάχιστον ένας πεζός χαρακτήρας ASCII στην ακολουθία και κανένας κεφαλαίος χαρακτήρας ASCII,False διαφορετικά.

Για παράδειγμα:

>>>b'hello world'.islower()True>>>b'Hello world'.islower()False

Οι πεζοί χαρακτήρες ASCII είναι αυτές οι τιμές byte στην ακολουθίαb'abcdefghijklmnopqrstuvwxyz'. Οι κεφαλαίοι χαρακτήρες ASCII είναι αυτές οι τιμές byte στην ακολουθίαb'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.

bytes.isspace()
bytearray.isspace()

ΕπιστρέφειTrue εάν όλα τα byte στην ακολουθία είναι κενά ASCII και η ακολουθία δεν είναι κενή,False διαφορετικά. Οι χαρακτήρες κενού διαστήματος ASCII είναι αυτές οι τιμές byte στην ακολουθίαb'\t\n\r\x0b\f' (κενό, tab, νέα γραμμή, επιστροφή μεταφοράς, κάθετο tab, μορφή ροής).

bytes.istitle()
bytearray.istitle()

ΕπιστρέφειTrue εάν η ακολουθία είναι ASCII κεφαλαία τίτλου (δηλαδή τα πρώτα γράμματα των λέξεων κεφαλαία) και η ακολουθία δεν είναι κενή,False διαφορετικά. Δείτεbytes.title() για περισσότερες λεπτομέρειες σχετικά με τον ορισμό του «titlecase».

Για παράδειγμα:

>>>b'Hello World'.istitle()True>>>b'Hello world'.istitle()False
bytes.isupper()
bytearray.isupper()

ΕπιστρέφειTrue εάν υπάρχει τουλάχιστον ένας κεφαλαίος αλφαβητικός χαρακτήρας ASCII στην ακολουθία και κανένας πεζός χαρακτήρας ASCII, διαφορετικάFalse.

Για παράδειγμα:

>>>b'HELLO WORLD'.isupper()True>>>b'Hello world'.isupper()False

Οι πεζοί χαρακτήρες ASCII είναι αυτές οι τιμές byte στην ακολουθίαb'abcdefghijklmnopqrstuvwxyz'. Οι κεφαλαίοι χαρακτήρες ASCII είναι αυτές οι τιμές byte στην ακολουθίαb'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.

bytes.lower()
bytearray.lower()

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

Για παράδειγμα:

>>>b'Hello World'.lower()b'hello world'

Οι πεζοί χαρακτήρες ASCII είναι αυτές οι τιμές byte στην ακολουθίαb'abcdefghijklmnopqrstuvwxyz'. Οι κεφαλαίοι χαρακτήρες ASCII είναι αυτές οι τιμές byte στην ακολουθίαb'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.

Σημείωση

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

bytes.splitlines(keepends=False)
bytearray.splitlines(keepends=False)

Επιστρέφει μια λίστα με τις γραμμές στη δυαδική ακολουθία, σπάζοντας τα όρια γραμμής του ASCII. Αυτή η μέθοδος χρησιμοποιεί την προσέγγισηuniversal newlines για τον διαχωρισμό των γραμμών. Οι αλλαγές γραμμής δεν περιλαμβάνονται στη λίστα που προκύπτει εκτός εάν δοθείkeepends και είναι αληθής.

Για παράδειγμα:

>>>b'ab c\n\nde fg\rkl\r\n'.splitlines()[b'ab c', b'', b'de fg', b'kl']>>>b'ab c\n\nde fg\rkl\r\n'.splitlines(keepends=True)[b'ab c\n', b'\n', b'de fg\r', b'kl\r\n']

Σε αντίθεση με τοsplit() όταν δίνεται μια οριοθετημένη συμβολοσειράsep, αυτή η μέθοδος επιστρέφει μια κενή λίστα για την κενή συμβολοσειρά και μια αλλαγή γραμμής τερματικού δεν οδηγεί σε μια επιπλέον γραμμή:

>>>b"".split(b'\n'),b"Two lines\n".split(b'\n')([b''], [b'Two lines', b''])>>>b"".splitlines(),b"One line\n".splitlines()([], [b'One line'])
bytes.swapcase()
bytearray.swapcase()

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

Για παράδειγμα:

>>>b'Hello World'.swapcase()b'hELLO wORLD'

Οι πεζοί χαρακτήρες ASCII είναι αυτές οι τιμές byte στην ακολουθίαb'abcdefghijklmnopqrstuvwxyz'. Οι κεφαλαίοι χαρακτήρες ASCII είναι αυτές οι τιμές byte στην ακολουθίαb'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.

Σε αντίθεση με τοstr.swapcase(), συμβαίνει πάντα ότιbin.swapcase().swapcase()==bin για τις δυαδικές εκδόσεις. Οι μετατροπές κεφαλαίων είναι συμμετρικές στο ASCII, παρόλο που αυτό δεν ισχύει γενικά για αυθαίρετα σημεία Unicode κώδικα.

Σημείωση

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

bytes.title()
bytearray.title()

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

Για παράδειγμα:

>>>b'Hello world'.title()b'Hello World'

Οι πεζοί χαρακτήρες ASCII είναι εκείνες οι τιμές byte στην ακολουθίαb'abcdefghijklmnopqrstuvwxyz'. Οι κεφαλαίο χαρακτήρες ASCII είναι εκείνες οι τιμές byte στην ακολουθίαb'ABCDEFGHIJKLMNOPQRSTUVWXYZ'. Όλες οι άλλες τιμές byte είναι χωρίς κεφαλαία.

Ο αλγόριθμος χρησιμοποιεί έναν απλό, ανεξάρτητο από τη γλώσσα, ορισμό μιας λέξης ως group διαδοχικών γραμμάτων. Ο ορισμός λειτουργεί σε πολλά contexts, αλλά σημαίνει ότι οι απόστροφοι σε συναιρέσεις και κτητικές λέξεις αποτελούν όρια λέξεων, που μπορεί να μην είναι το επιθυμητό αποτέλεσμα:

>>>b"they're bill's friends from the UK".title()b"They'Re Bill'S Friends From The Uk"

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

>>>importre>>>deftitlecase(s):...returnre.sub(rb"[A-Za-z]+('[A-Za-z]+)?",...lambdamo:mo.group(0)[0:1].upper()+...mo.group(0)[1:].lower(),...s)...>>>titlecase(b"they're bill's friends.")b"They're Bill's Friends."

Σημείωση

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

bytes.upper()
bytearray.upper()

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

Για παράδειγμα:

>>>b'Hello World'.upper()b'HELLO WORLD'

Οι πεζοί χαρακτήρες ASCII είναι αυτές οι τιμές byte στην ακολουθίαb'abcdefghijklmnopqrstuvwxyz'. Οι κεφαλαίοι χαρακτήρες ASCII είναι αυτές οι τιμές byte στην ακολουθίαb'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.

Σημείωση

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

bytes.zfill(width)
bytearray.zfill(width)

Επιστρέφει ένα αντίγραφο της ακολουθίας που έχει απομείνει γεμάτο με ψηφία ASCIIb'0' για να δημιουργήσετε μια ακολουθία μήκουςwidth. Ένα πρόθεμα προπορευόμενου σήματος (b'+'/b'-') αντιμετωπίζεται με την εισαγωγή της συμπλήρωσης τουafter χαρακτήρα προσήμου και όχι πριν. Για αντικείμεναbytes, η αρχική ακολουθία επιστρέφεται εάν τοwidth είναι μικρότερο ή ίσο μεlen(seq).

Για παράδειγμα:

>>>b"42".zfill(5)b'00042'>>>b"-42".zfill(5)b'-0042'

Σημείωση

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

Μορφοποίηση Bytes τύπουprintf

Σημείωση

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

Τα αντικείμενα bytes (bytes/bytearray) έχουν μια μοναδική ενσωματωμένη λειτουργία: τον τελεστή% (modulo). Αυτό είναι επίσης γνωστό ως τελεστής bytesformatting ήinterpolation. Δεδομένων τωνformat%values (όπου τοformat είναι αντικείμενο bytes), οι προδιαγραφές μετατροπής% σεformat αντικαθιστά με μηδέν ή περισσότερα στοιχείαvalues. Το αποτέλεσμα είναι παρόμοιο με τη χρήση τουsprintf() στη γλώσσας C.

Εάν τοformat απαιτεί ένα μεμονωμένο όρισμα, τοvalues μπορεί να είναι ένα μεμονωμένο μη πολλαπλό αντικείμενο.[5] Διαφορετικά, τοvalues πρέπει να είναι πλειάδα με ακριβώς τον αριθμό των στοιχείων που καθορίζονται από το αντικείμενο μορφής bytes ή μεμονωμένο mapping αντικείμενο (για παράδειγμα, ένα λεξικό).

Ένας προσδιοριστής μετατροπής περιέχει δύο ή περισσότερους χαρακτήρες και έχει τους εξής components, οι οποίοι πρέπει να εμφανίζονται με αυτή τη σειρά:

  1. Ο χαρακτήρας`%'', που σηματοδοτεί την αρχή του προσδιοριστή.

  2. Κλειδί mapping (προαιρετικό), που αποτελείται από μια ακολουθία χαρακτήρων σε παρένθεση (για παράδειγμα,(somename)).

  3. Δείκτες μετατροπής (προαιρετικό), που επηρεάζουν το αποτέλεσμα κάποιων τύπων μετατροπής.

  4. Ελάχιστο πλάτος πεδίου (προαιρετικό). Εάν ορίζεται ως'*' (αστερίσκος), το πραγματικό πλάτος διαβάζεται από το επόμενο στοιχείο του tuple σταvalues, και το αντικείμενο προς μετατροπή έρχεται μετά από το ελάχιστο πλάτος πεδίου και το προαιρετικό precision.

  5. Ακρίβεια (προαιρετικό), δίνεται ως'.' (τελεία) ακολουθούμενη από το precision.Εάν ορίζεται ως'*' (αστερίσκος), το πραγματικό precision διαβάζεται από το επόμενο στοιχείο του tuple σταvalues, και η τιμή προς μετατροπή έρχεται μετά το precision.

  6. Μετατροπέας του length (προαιρετικό).

  7. Τύπος conversion.

Όταν το σωστό όρισμα είναι ένα λεξικό (ή άλλος τύπος αντιστοίχισης), τότε οι μορφές στο αντικείμενο bytesπρέπει να περιλαμβάνουν ένα κλειδί αντιστοίχισης σε παρένθεση σε αυτό το λεξικό που έχει εισαχθεί αμέσως μετά τον χαρακτήρα'%'. Το κλειδί αντιστοίχισης επιλέγει την τιμή που θα μορφοποιηθεί από την αντιστοίχιση. Για παράδειγμα:

>>>print(b'%(language)s has%(number)03d quote types.'%...{b'language':b"Python",b"number":2})b'Python has 002 quote types.'

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

Οι δείκτες μετατροπής είναι:

Flag

Έννοια

'#'

Οι μετατροπή τιμής θα χρησιμοποιήσει την «εναλλακτική φόρμα» (όπου ορίζεται παρακάτω).

'0'

Η μετατροπή θα έχει μηδενική συμπλήρωση για αριθμητικές τιμές.

'-'

Η τιμή μετατροπής αφήνεται προσαρμοσμένη (παρακάμπτει τη μετατροπή'0' εάν δίνονται και τα δύο).

''

(ένα κενό) Πρέπει να προστεθεί ένα κενό πριν από έναν θετικό αριθμό (ή κενή συμβολοσειρά) που παράγεται από μια υπογεγραμμένη μετατροπή.

'+'

Ένα χαρακτήρας προσήμου ('+' ή'-') θα προηγείται της μετατροπής (παρακάμπτει ένα «κενό» δείκτη).

Ένας τροποποιητής μήκους (h,l, orL) μπορεί να υπάρχει, αλλά αγνοείται καθώς δεν είναι απαραίτητος για την Python – οπότε π.χ.%ld είναι πανομοιότυπο σε%d.

Οι τύποι μετατροπής είναι:

Μετατροπή

Έννοια

Σημειώσεις

'd'

Υπογεγραμμένος δεκαδικός ακέραιος.

'i'

Υπογεγραμμένος δεκαδικός ακέραιος.

'o'

Υπογεγραμμένη οκταδική τιμή.

(1)

'u'

Απαρχαιωμένος τύπος – είναι πανομοιότυπος με το'd'.

(8)

'x'

Υπογεγραμμένο δεκαεξαδικό (πεζά).

(2)

'X'

Υπογεγραμμένο δεκαεξαδικό (κεφαλαίο).

(2)

'e'

Εκθετική μορφή κινητής υποδιαστολής (πεζά)

(3)

'E'

Εκθετική μορφή κινητής υποδιαστολής (κεφαλαία)

(3)

'f'

Δεκαδική μορφή κινητής υποδιαστολής.

(3)

'F'

Δεκαδική μορφή κινητής υποδιαστολής.

(3)

'g'

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

(4)

'G'

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

(4)

'c'

Μονό byte (δέχεται ακέραια ή μεμονωμένα byte αντικείμενα).

'b'

Bytes (κάθε αντικείμενο που ακολουθεί τοbuffer protocol ή έχει__bytes__()).

(5)

's'

Το's' είναι ένα ψευδώνυμο για το'b' και θα πρέπει να χρησιμοποιείται μόνο για κώδικα βάσει Python2/3.

(6)

'a'

Bytes (μετατρέπει οποιοδήποτε αντικείμενο Python χρησιμοποιώνταςrepr(obj).encode('ascii','backslashreplace')).

(5)

'r'

Το'r' είναι ένα ψευδώνυμο για'a' και θα πρέπει να χρησιμοποιείται μόνο για βάσεις κώδικα Python2/3.

(7)

'%'

Κανένα όρισμα δεν μετατρέπεται, έχει ως αποτέλεσμα έναν χαρακτήρα'%' το αποτέλεσμα.

Σημειώσεις:

  1. Η εναλλακτική μορφή προκαλεί την εισαγωγή ενός πρώτου οκταδικού προσδιοριστή ('0o') πριν από το πρώτο ψηφίο.

  2. Η εναλλακτική φόρμα προκαλεί την εισαγωγή ενός αρχικού'0x' ή'0X' (ανάλογα με το εάν χρησιμοποιήθηκε η μορφή'x' ή'X') πριν το πρώτο ψηφίο.

  3. Η εναλλακτική μορφή κάνει το αποτέλεσμα να περιέχει πάντα μια υποδιαστολή, ακόμα κι αν δεν ακολουθούν ψηφία.

    Η ακρίβεια καθορίζει τον αριθμό των ψηφίων μετά την υποδιαστολή και ορίζεται από προεπιλογή ως 6.

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

    Η ακρίβεια καθορίζει τον αριθμό των σημαντικών ψηφίων πριν και μετά την υποδιαστολή και ορίζει το 6.

  5. Εάν η ακρίβεια είναι``N``, η έξοδος περικόπτεται σεN χαρακτήρες.

  6. Τοb'%s' έχει καταργηθεί, αλλά δεν θα αφαιρεθεί κατά τη διάρκεια της σειράς 3.x.

  7. Τοb'%r' έχει καταργηθεί, αλλά δεν θα αφαιρεθεί κατά τη διάρκεια της σειράς 3.x.

  8. ΒλέπεPEP 237.

Σημείωση

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

Δείτε επίσης

PEP 461 - Προσθήκη % για μορφοποίηση σε bytes και bytearray

Added in version 3.5.

Όψεις Μνήμης

Τα αντικείμεναmemoryview επιτρέπουν στον κώδικα Python να έχει πρόσβαση στα εσωτερικά δεδομένα ενός αντικειμένου που υποστηρίζει το πρωτόκολλοbuffer protocol χωρίς αντιγραφή.

classmemoryview(object)

Δημιουργεί μιαmemoryview που αναφέρεται στοobject. Τοobject πρέπει να υποστηρίζει το πρωτόκολλο buffer. Τα ενσωματωμένα αντικείμενα που υποστηρίζουν το πρωτόκολλο buffer περιλαμβάνουνbytes καιbytearray.

Μιαmemoryview έχει την έννοια ενόςστοιχείου, το οποίο είναι η μονάδα ατομικής μνήμης που χειρίζεται το αρχικόobject. Για πολλούς απλούς τύπους όπωςbytes καιbytearray, ένα στοιχείο είναι ένα μεμονωμένο byte, αλλά άλλοι τύποι όπωςarray.array μπορεί να έχουν μεγαλύτερα στοιχεία.

Τοlen(view) ισούται με το μήκος τουtolist, το οποίο είναι η ένθετη αναπαράσταση κατά την προβολή της λίστας. Εάνview.ndim=1, αυτό ισούται με τον αριθμό των στοιχείων για την προβολή.

Άλλαξε στην έκδοση 3.12:Εάνview.ndim==0, τοlen(view) τώρα κάνει raise μιαTypeError αντί να επιστρέψει 1.

Το χαρακτηριστικόitemsize θα σας δώσει τον αριθμό των byte σε ένα μόνο στοιχείο.

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

>>>v=memoryview(b'abcefg')>>>v[1]98>>>v[-1]103>>>v[1:4]<memory at 0x7f3ddc9f4350>>>>bytes(v[1:4])b'bce'

Εάν τοformat είναι ένας από τους προσδιοριστές εγγενούς μορφής από το modulestruct, η πρόσβαση μέσω ευρετηρίου με έναν ακέραιο ή μια πλειάδα (tuple) ακεραίων υποστηρίζεται επίσης και επιστρέφει ένα μεμονωμένοστοιχείο με το σωστό τύπο. Τα μονοδιάστατα memoryviews μπορούν να γίνουν indexed με έναν ακέραιο ή έναν ακέραιο πλειάδα (tuple). Τα πολυδιάστατα memoryviews μπορούν αν γίνουν indexed με πλειάδες (tuples) ακριβώςndim ακεραίων όπουndim είναι ο αριθμός των διαστάσεων. Τα μηδενικών διαστάσεων memoryviews μπορούν να γίνουν indexed με την κενή πλειάδα (tuple).

Ακολουθεί ένα παράδειγμα με μη-byte μορφή:

>>>importarray>>>a=array.array('l',[-11111111,22222222,-33333333,44444444])>>>m=memoryview(a)>>>m[0]-11111111>>>m[-1]44444444>>>m[::2].tolist()[-11111111, -33333333]

Εάν το βασικό αντικείμενο είναι εγγράψιμο, το memoryview υποστηρίζει μονοδιάστατη εκχώρηση τμηματοποίησης. Δεν επιτρέπεται η αλλαγή μεγέθους:

>>>data=bytearray(b'abcefg')>>>v=memoryview(data)>>>v.readonlyFalse>>>v[0]=ord(b'z')>>>databytearray(b'zbcefg')>>>v[1:4]=b'123'>>>databytearray(b'z123fg')>>>v[2:3]=b'spam'Traceback (most recent call last):  File"<stdin>", line1, in<module>ValueError:memoryview assignment: lvalue and rvalue have different structures>>>v[2:6]=b'spam'>>>databytearray(b'z1spam')

Τα μονοδιάστατα memoryviews των τύπωνhashable (μόνο για ανάγνωση) με μορφές “B”, “b” ή “c” μπορούν επίσης να κατακερματιστούν. Ο κατακερματισμός ορίζεται ωςhash(m)==hash(m.tobytes()):

>>>v=memoryview(b'abcefg')>>>hash(v)==hash(b'abcefg')True>>>hash(v[2:4])==hash(b'ce')True>>>hash(v[::-2])==hash(b'abcefg'[::-2])True

Άλλαξε στην έκδοση 3.3:Τα μονοδιάστατα memoryviews μπορούν πλέον να τμηματοποιηθούν. Τα μονοδιάστατα memoryviews με μορφές “B”, “b” ή “c” είναι πλέονhashable.

Άλλαξε στην έκδοση 3.4:το memoryview εγγράφεται πλέον αυτόματα μεcollections.abc.Sequence

Άλλαξε στην έκδοση 3.5:τα memoryviews μπορούν τώρα να γίνουν ευρετηριοποίηση με πλειάδα (tuple) ακεραίων.

Άλλαξε στην έκδοση 3.14:Το memoryview είναι πλέον έναgeneric type.

τοmemoryview έχει διάφορες μεθόδους:

__eq__(exporter)

Ένα memoryview και ένας εξαγωγέαςPEP 3118 είναι ίσοι εάν τα σχήματα τους είναι ισοδύναμα και εάν όλες οι αντίστοιχες τιμές είναι ίσες όταν οι αντίστοιχοι κωδικοί μορφής των τελεστών ερμηνεύονται χρησιμοποιώντας τη σύνταξηstruct.

Για το υποσύνολο τουstruct οι συμβολοσειρές μορφής που υποστηρίζονται αυτή τη στιγμή από τοtolist(),v καιw είναι ίσες εάνv.tolist()==w.tolist():

>>>importarray>>>a=array.array('I',[1,2,3,4,5])>>>b=array.array('d',[1.0,2.0,3.0,4.0,5.0])>>>c=array.array('b',[5,3,1])>>>x=memoryview(a)>>>y=memoryview(b)>>>x==a==y==bTrue>>>x.tolist()==a.tolist()==y.tolist()==b.tolist()True>>>z=y[::-2]>>>z==cTrue>>>z.tolist()==c.tolist()True

Εάν καμία συμβολοσειρά μορφής δεν υποστηρίζεται από το modulestruct, τότε τα αντικείμενα θα συγκρίνονται πάντα ως άνισα (ακόμα και αν οι συμβολοσειρές μορφοποίησης και τα περιεχόμενα της προσωρινής μνήμης είναι πανομοιότυπα):

>>>fromctypesimportBigEndianStructure,c_long>>>classBEPoint(BigEndianStructure):..._fields_=[("x",c_long),("y",c_long)]...>>>point=BEPoint(100,200)>>>a=memoryview(point)>>>b=memoryview(point)>>>a==pointFalse>>>a==bFalse

Λάβετε υπόψη ότι, όπως και με τους αριθμούς κινητής υποδιαστολής,viswδεν σημαίνειv==w για αντικείμενα memoryview.

Άλλαξε στην έκδοση 3.3:Οι προηγούμενες εκδόσεις συνέκριναν την ακατέργαστη μνήμη αγνοώντας τη μορφή του στοιχείου και τη δομή του λογικού πίνακα.

tobytes(order='C')

Επιστρέφει τα δεδομένα στο buffer ως ένα bytestring. Αυτό ισοδυναμεί με την κλήση του κατασκευαστήbytes στο memoryview.

>>>m=memoryview(b"abc")>>>m.tobytes()b'abc'>>>bytes(m)b'abc'

Για μη συνεχόμενους πίνακες, το αποτέλεσμα είναι ίσο με την αναπαράσταση της ισοπεδωμένης λίστας με όλα τα στοιχεία να μετατρέπονται σε bytes. Ηtobytes() υποστηρίζει όλες τις συμβολοσειρές μορφής, συμπεριλαμβανομένων εκείνων που δεν είναι στη σύνταξη του modulestruct.

Added in version 3.8:Τοorder μπορεί να είναι {“C”, “F”, “A”}. Όταν τοorder είναι “C” ή “F”, τα δεδομένα του αρχικού πίνακα μετατρέπονται σε C ή σε σειρά Fortran. Για συνεχόμενες όψεις, το “A” επιστρέφει ένα ακριβές αντίγραφο της φυσικής μνήμης. Συγκεκριμένα, διατηρείται σειρά Fortran στη μνήμη. Για μη συνεχόμενες προβολές, τα δεδομένα μετατρέπονται πρώτα σε C. Τοorder=None είναι το ίδιο με τοorder=”C”.

hex([sep[,bytes_per_sep]])

Επιστρέφει ένα αντικείμενο συμβολοσειράς που περιέχει δύο δεκαεξαδικά ψηφία για κάθε byte στο buffer.

>>>m=memoryview(b"abc")>>>m.hex()'616263'

Added in version 3.5.

Άλλαξε στην έκδοση 3.8:Παρόμοιο με τοbytes.hex(), τοmemoryview.hex() τώρα υποστηρίζει προαιρετικές παραμέτρουςsep καιbytes_per_sep για να εισάγετε διαχωριστικά μεταξύ των byte στην εξαγωγή δεκαεξαδικού.

tolist()

Επιστρέψτε τα δεδομένα στο buffer ως λίστα στοιχείων.

>>>memoryview(b'abc').tolist()[97, 98, 99]>>>importarray>>>a=array.array('d',[1.1,2.2,3.3])>>>m=memoryview(a)>>>m.tolist()[1.1, 2.2, 3.3]

Άλλαξε στην έκδοση 3.3:Ηtolist() υποστηρίζει πλέον όλες τις εγγενείς μορφές μεμονωμένων χαρακτήρων στη σύνταξη τουstruct, καθώς και πολυδιάστατες αναπαραστάσεις.

toreadonly()

Επιστρέφει μια έκδοση μόνο για ανάγνωση του αντικειμένου memoryview. Το αρχικό αντικείμενο memoryview είναι αμετάβλητο.

>>>m=memoryview(bytearray(b'abc'))>>>mm=m.toreadonly()>>>mm.tolist()[97, 98, 99]>>>mm[0]=42Traceback (most recent call last):  File"<stdin>", line1, in<module>TypeError:cannot modify read-only memory>>>m[0]=43>>>mm.tolist()[43, 98, 99]

Added in version 3.8.

release()

Απελευθερώνει το υποκείμενο buffer που εκτίθεται από το αντικείμενο memoryview. Πολλά αντικείμενα πραγματοποιούν ειδικές ενέργειες όταν διατηρείται μια προβολή σε αυτά (για παράδειγμα, μιαbytearray θα απαγόρευε προσωρινά την αλλαγή μεγέθους)· επομένως, η κλήση της release() είναι βολική για την κατάργηση αυτών των περιορισμών (και απελευθερώνει οποιουσδήποτε αιωρούμενους πόρους) το συντομότερο δυνατό.

Μετά την κλήση αυτής της μεθόδου, οποιαδήποτε περαιτέρω λειτουργία στην προβολή δημιουργεί μιαValueError (εκτός από την ίδια τηνrelease() που μπορεί να κληθεί πολλές φορές):

>>>m=memoryview(b'abc')>>>m.release()>>>m[0]Traceback (most recent call last):  File"<stdin>", line1, in<module>ValueError:operation forbidden on released memoryview object

Το πρωτόκολλο διαχείρισης περιεχομένου μπορεί να χρησιμοποιηθεί για παρόμοιο αποτέλεσμα, χρησιμοποιώντας τη δήλωσηwith:

>>>withmemoryview(b'abc')asm:...m[0]...97>>>m[0]Traceback (most recent call last):  File"<stdin>", line1, in<module>ValueError:operation forbidden on released memoryview object

Added in version 3.2.

cast(format[,shape])

Μορφοποιεί ένα memoryview σε νέα μορφή ή σχήμα. Τοshape είναι από προεπιλογή[byte_length//new_itemsize], που σημαίνει ότι η προβολή αποτελέσματος θα είναι μονοδιάστατη. Η επιστρεφόμενη τιμή είναι ένα νέο memoryview, αλλά το ίδιο το buffer δεν αντιγράφεται. Οι υποστηριζόμενες μετατροπές είναι 1D -> C-contiguous και C-contiguous -> 1D.

Η μορφή προορισμού περιορίζεται σε μια εγγενή μορφή μεμονωμένου στοιχείου στη σύνταξηstruct. Μία από τις μορφές πρέπει να είναι μορφή byte (“B”, “b” ή “c”). Το μήκος byte του αποτελέσματος πρέπει να είναι το ίδιο με το αρχικό μήκος. Σημειώστε ότι όλα τα μήκη byte μπορεί να εξαρτώνται από το λειτουργικό σύστημα.

Μορφοποίηση από 1D/long σε 1D/unsigned bytes:

>>>importarray>>>a=array.array('l',[1,2,3])>>>x=memoryview(a)>>>x.format'l'>>>x.itemsize8>>>len(x)3>>>x.nbytes24>>>y=x.cast('B')>>>y.format'B'>>>y.itemsize1>>>len(y)24>>>y.nbytes24

Μορφοποίηση από 1D/unsigned bytes σε 1D/char:

>>>b=bytearray(b'zyz')>>>x=memoryview(b)>>>x[0]=b'a'Traceback (most recent call last):...TypeError:memoryview: invalid type for format 'B'>>>y=x.cast('c')>>>y[0]=b'a'>>>bbytearray(b'ayz')

Μορφοποίηση από 1D/bytes σε 3D/ints σε 1D/signed char:

>>>importstruct>>>buf=struct.pack("i"*12,*list(range(12)))>>>x=memoryview(buf)>>>y=x.cast('i',shape=[2,2,3])>>>y.tolist()[[[0, 1, 2], [3, 4, 5]], [[6, 7, 8], [9, 10, 11]]]>>>y.format'i'>>>y.itemsize4>>>len(y)2>>>y.nbytes48>>>z=y.cast('b')>>>z.format'b'>>>z.itemsize1>>>len(z)48>>>z.nbytes48

Μορφοποίηση από 1D/unsigned long σε 2D/unsigned long:

>>>buf=struct.pack("L"*6,*list(range(6)))>>>x=memoryview(buf)>>>y=x.cast('L',shape=[2,3])>>>len(y)2>>>y.nbytes48>>>y.tolist()[[0, 1, 2], [3, 4, 5]]

Added in version 3.3.

Άλλαξε στην έκδοση 3.5:Η πηγαία μορφή δεν είναι πλέον περιορισμένη κατά τη μορφοποίηση σε μια όψη byte.

count(value,/)

Μετράει τον αριθμό των εμφανίσεων τουvalue.

Added in version 3.14.

index(value,start=0,stop=sys.maxsize,/)

Επιστρέφει τον δείκτη της πρώτης εμφάνισης τουvalue (στην ή μετά τον δείκτηstart και πριν από τον δείκτηstop).

Κάνει raise μιαValueError αν δεν μπορεί να βρεθεί η τιμήvalue.

Added in version 3.14.

Υπάρχουν επίσης αρκετά διαθέσιμα χαρακτηριστικά μόνο για ανάγνωση:

obj

Το βασικό αντικείμενο του memoryview:

>>>b=bytearray(b'xyz')>>>m=memoryview(b)>>>m.objisbTrue

Added in version 3.3.

nbytes

nbytes==product(shape)*itemsize==len(m.tobytes()). Αυτή είναι η ποσότητα χώρου σε byte που θα χρησιμοποιούσε ο πίνακας σε μια συνεχόμενη αναπαράσταση. Δεν ισούται απαραίτητα μεlen(m):

>>>importarray>>>a=array.array('i',[1,2,3,4,5])>>>m=memoryview(a)>>>len(m)5>>>m.nbytes20>>>y=m[::2]>>>len(y)3>>>y.nbytes12>>>len(y.tobytes())12

Πολυδιάστατοι πίνακες:

>>>importstruct>>>buf=struct.pack("d"*12,*[1.5*xforxinrange(12)])>>>x=memoryview(buf)>>>y=x.cast('d',shape=[3,4])>>>y.tolist()[[0.0, 1.5, 3.0, 4.5], [6.0, 7.5, 9.0, 10.5], [12.0, 13.5, 15.0, 16.5]]>>>len(y)3>>>y.nbytes96

Added in version 3.3.

readonly

Ένα bool που υποδεικνύει εάν η μνήμη είναι μόνο για ανάγνωση.

format

Μια συμβολοσειρά που περιέχει τη μορφή (σε module stylestruct) για κάθε στοιχείο σε μια όψη. Μπορεί να δημιουργηθεί ένα memoryview από εξαγωγείς με συμβολοσειρές αυθαίρετης μορφής, αλλά ορισμένες μέθοδοι (π.χ.tolist()) είναι περιορισμένες σε εγγενείς μορφές ενός στοιχείου.

Άλλαξε στην έκδοση 3.3:η μορφή'B' αντιμετωπίζεται πλέον σύμφωνα με τη σύνταξη ενός struct module. Αυτό σημαίνει ότιmemoryview(b'abc')[0]==b'abc'[0]==97.

itemsize

Το μέγεθος σε bytes κάθε στοιχείου στο memoryview:

>>>importarray,struct>>>m=memoryview(array.array('H',[32000,32001,32002]))>>>m.itemsize2>>>m[0]32000>>>struct.calcsize('H')==m.itemsizeTrue
ndim

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

shape

Μια πλειάδα (tuple) ακεραίων με μήκοςndim δίνοντας το σχήμα της μνήμης ως πίνακα N-διαστάσεων.

Άλλαξε στην έκδοση 3.3:Μια κενή πλειάδα (tuple) αντί γιαNone όταν ndim = 0.

strides

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

Άλλαξε στην έκδοση 3.3:Μια κενή πλειάδα (tuple) αντί γιαNone όταν ndim = 0.

suboffsets

Χρησιμοποιείται εσωτερικά για συστοιχίες τύπου PIL. Η τιμή είναι μόνο ενημερωτική.

c_contiguous

Ένα bool που υποδεικνύει εάν η μνήμη είναι C-contiguous.

Added in version 3.3.

f_contiguous

Ένα bool που υποδεικνύει εάν η μνήμη είναι Fortrancontiguous.

Added in version 3.3.

contiguous

Ένα bool που υποδεικνύει εάν η μνήμη είναιcontiguous.

Added in version 3.3.

Τύποι Συνόλου (Set) —set,frozenset

Ένα αντικείμενοset είναι μια μη ταξινομημένη συλλογή από διακριτά αντικείμεναhashable. Οι συνήθεις χρήσεις περιλαμβάνουν τη δοκιμή ιδιότητας μέλους, την αφαίρεση διπλότυπων από μια ακολουθία και τον υπολογισμό μαθηματικών πράξεων όπως τομή, ένωση, διαφορά, και συμμετρική διαφορά. (Για άλλα containers, δείτε τις ενσωματωμένες κλάσειςdict,list, καιtuple και το modulecollections).

Όπως και άλλες συλλογές, τα σύνολα (sets) υποστηρίζουνxinset,len(set), καιforxinset. Όντως μια μη ταξινομημένη συλλογή, τα σύνολα δεν καταγράφουν τη θέση του στοιχείου ή τη σειρά εισαγωγής. Συνεπώς, τα σύνολα (sets) δεν υποστηρίζουν λειτουργίες ευρετηριοποίησης, τμηματοποίησης ή άλλη συμπεριφορά ακολουθίας.

Υπάρχουν αυτή τη στιγμή δύο ενσωματωμένοι τύποι συνόλου,set καιfrozenset. Ο τύποςset είναι ευμετάβλητος — τα περιεχόμενα του μπορούν να αλλάξουν χρησιμοποιώντας μεθόδους όπωςadd() καιremove(). Δεδομένου ότι είναι ευμετάβλητο, δεν έχει τιμή κατακερματισμού και δεν μπορεί να χρησιμοποιηθεί ούτε ως κλειδί λεξικού ούτε ως στοιχείο ενός άλλου συνόλου (set). Ο τύποςfrozenset είναι αμετάβλητος καιhashable — το περιεχόμενό του δεν μπορεί να αλλάξει μετά τη δημιουργία του· μπορεί επομένως να χρησιμοποιηθεί ως κλειδί λεξικού ή ως στοιχείο άλλου συνόλου (set).

Μπορούν να δημιουργηθούν μη κενά σύνολα (όχι παγωμένα σύνολα (frozensets)) τοποθετώντας μια λίστα στοιχείων διαχωρισμένων με κόμμα μέσα σε αγκύλες, για παράδειγμα:{'jack','sjoerd'}, επιπλέον με τη χρήση του constructor τουset.

Οι constructors και για τις δύο κλάσεις λειτουργούν το ίδιο:

classset([iterable])
classfrozenset([iterable])

Επιστρέφει ένα νέο σύνολο (set) ή ένα παγωμένο σύνολο (frozenset) των οποίων τα στοιχεία έχουν ληφθεί από τοiterable. Τα στοιχεία ενός συνόλου πρέπει να είναιhashable. Για να αναπαραστήσουν σύνολα συνόλων, τα εσωτερικά σύνολα πρέπει να είναιfrozenset αντικείμενα. Εάν δεν έχει καθοριστεί τοiterable, επιστρέφεται ένα νέο κενό σύνολο.

Τα σύνολα μπορούν να δημιουργηθούν με διάφορους τρόπους:

  • Χρησιμοποιώντας μια λίστα στοιχείων διαχωρισμένη με κόμματα:{'jack','sjoerd'}

  • Χρησιμοποιώντας ένα set comprehension:{cforcin'abracadabra'ifcnotin'abc'}

  • Χρησιμοποιώντας τον τύπο constructor:set(),set('foobar'),set(['a','b','foo'])

Τα στιγμιότυπα τωνset καιfrozenset παρέχουν τις ακόλουθες λειτουργίες:

len(s)

Επιστρέφει τον αριθμό των στοιχείων στο σύνολοs (πληθικότητα τουs).

xins

Ελέγχει αν τοx είναι μέρος στοs.

xnotins

Ελέγχει αν τοx δεν είναι μέρος στοs.

isdisjoint(other)

ΕπιστρέφειTrue εάν το σύνολο δεν έχει κοινά στοιχεία με τοother. Τα σύνολα είναι ασύνδετα εάν και μόνο εάν η τομή τους είναι το κενό σύνολο.

issubset(other)
set<=other

Ελέγχει εάν κάθε στοιχείο στο σύνολο βρίσκεται στοother.

set<other

Ελέγχει εάν το σύνολο είναι σωστό υποσύνολο τουother, δηλαδή,set<=otherandset!=other.

issuperset(other)
set>=other

Ελέγχει αν κάθε στοιχείο τουother είναι στο σύνολο.

set>other

Ελέγχει αν το σύνολο είναι σωστό υπερσύνολο τουother, δηλαδή,set>=otherandset!=other.

union(*others)
set|other|...

Επιστρέφει ένα νέο σύνολο με στοιχεία από το σύνολο και όλα τα άλλα.

intersection(*others)
set&other&...

Επιστρέφει ένα νέο σύνολο με στοιχεία κοινά στο σύνολο και σε όλα τα άλλα.

difference(*others)
set-other-...

Επιστρέφει ένα νέο σύνολο με στοιχεία στο σύνολο που δεν υπάρχουν στα άλλα.

symmetric_difference(other)
set^other

Επιστρέφει ένα νέο σύνολο με στοιχεία είτε στο σύνολο είτε στοother αλλά όχι και στα δύο.

copy()

Επιστρέφει ένα ρηχό αντίγραφο του συνόλου.

Σημείωση, οι εκδόσεις μη τελεστών των μεθόδωνunion(),intersection(),difference(),symmetric_difference(),issubset(), καιissuperset() θα δεχτούν οποιοδήποτε iterable ως όρισμα. Αντίθετα, οι αντίστοιχοι τελεστές απαιτούν να οριστούν τα ορίσματά τους για να γίνουν σύνολα. Αυτό αποκλείει κατασκευαστές επιρρεπείς σε σφάλματα όπωςset('abc')&'cbs' υπέρ του πιο ευανάγνωστουset('abc').intersection('cbs').

Τόσο τοset καιfrozenset υποστηρίζουν τη σύγκριση μεταξύ συνόλων. Δύο σύνολα είναι ίσα εάν και μόνο εάν κάθε στοιχείο κάθε συνόλου περιέχεται στο άλλο (το καθένα είναι υποσύνολο του άλλου). Ένα σύνολο είναι μικρότερο από ένα άλλο σύνολο εάν και μόνο αν το πρώτο σύνολο είναι σωστό υποσύνολο του δεύτερου συνόλου (είναι υποσύνολο, αλλά δεν είναι ίσο), ένα σύνολο είναι μεγαλύτερο από ένα άλλο σύνολο, αν και μόνο αν το πρώτο σύνολο είναι σωστό υπερσύνολο του δεύτερου συνόλου (είναι υπερσύνολο αλλά δεν είναι ίσο).

Τα στιγμιότυπα τηςset συγκρίνονται με τα στιγμιότυπα τηςfrozenset με βάση τα μέλη τους. Για παράδειγμα, τοset('abc')==frozenset('abc') επιστρέφειTrue και το ίδιο συμβαίνει και με τοset('abc')inset([frozenset('abc')]).

Οι συγκρίσεις υποσυνόλου και ισότητας δεν γενικεύονται σε μια συνάρτηση ολικής ταξινόμησης. Για παράδειγμα, οποιαδήποτε δύο μη κενά συνεχή σύνολα δεν είναι ίσα και δεν είναι υποσύνολα το ένα του άλλου, επομένωςόλα τα ακόλουθα επιστρέφουνFalse:a<b,a==b, ora>b.

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

Τα στοιχεία συνόλου, όπως τα κλειδιά λεξικού, πρέπει να είναιhashable.

Δυαδικές πράξεις που συνδυάζουν στιγμιότυπαset μεfrozenset επιστρέφουν τον τύπο του πρώτου τελεστή. Για παράδειγμα:frozenset('ab')|set('bc') επιστρέφει ένα στιγμιότυπο τουfrozenset.

Ο παρακάτω πίνακας παραθέτει λειτουργίες που είναι διαθέσιμες γιαset που δεν ισχύουν για αμετάβλητα στιγμιότυπα τηςfrozenset:

update(*others)
set|=other|...

Ενημερώνει το σύνολο (set), προσθέτοντας στοιχεία από όλα τα άλλα.

intersection_update(*others)
set&=other&...

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

difference_update(*others)
set-=other|...

Ενημερώνει το σύνολο, αφαιρώντας στοιχεία που βρίσκονται σε άλλα.

symmetric_difference_update(other)
set^=other

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

add(elem)

Προσθέτει το στοιχείοelem στο σύνολο.

remove(elem)

Αφαιρεί το στοιχείοelem από το σύνολο. Κάνει raise τηKeyError εάν τοelem δεν περιέχεται στο σύνολο.

discard(elem)

Αφαιρεί το στοιχείοelem από το σύνολο εάν υπάρχει.

pop()

Αφαιρεί και επιστρέφει ένα αυθαίρετο στοιχείο από το σύνολο. Κάνει raise μιαKeyError εάν το σύνολο είναι κενό.

clear()

Αφαιρεί όλα τα στοιχεία από το σύνολο (set).

Σημείωση, οι εκδόσεις μη-τελεστή μεθόδωνupdate(),intersection_update(),difference_update(), καιsymmetric_difference_update() θα δέχονται οποιοδήποτε επαναλαμβανόμενο στοιχείο ως όρισμα.

Σημείωση, το όρισμαelem για τις μεθόδους__contains__(),remove(), καιdiscard() μπορεί να είναι ένα σύνολο. Για την υποστήριξη της αναζήτησης για ένα ισοδύναμο παγωμένο σύνολο (frozenset), ένα προσωρινό δημιουργείται από τοelem.

Τύποι αντιστοίχισης —dict

Ένα αντικείμενοmapping αντιστοιχίζειhashable τιμές σε αυθαίρετα αντικείμενα. Οι αντιστοιχίσεις είναι μεταβλητά αντικείμενα. Υπάρχει επί του παρόντος μόνο ένα τυπικός τύπο αντιστοίχισης, τοdictionary. (Για άλλα containers δείτε τις ενσωματωμένες (built-in)list,set, καιtuple κλάσεις, και το modulecollections.)

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

classdict(**kwargs)
classdict(mapping,**kwargs)
classdict(iterable,**kwargs)

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

Τα λεξικά μπορούν να δημιουργηθούν με διάφορους τρόπους:

  • Χρησιμοποιήστε μια λίστα διαχωρισμένων με κόμματα ζευγώνkey:value μέσα σε αγκύλες:{'jack':4098,'sjoerd':4127} or{4098:'jack',4127:'sjoerd'}

  • Χρησιμοποιήστε ένα comprehension λεξικού:{},{x:x**2forxinrange(10)}

  • Χρησιμοποιήστε τον κατασκευαστή τύπου:dict(),dict([('foo',100),('bar',200)]),dict(foo=100,bar=200)

Εάν δεν δοθεί όρισμα θέσης, δημιουργείται ένα κενό λεξικό. Εάν δοθεί ένα όρισμα θέσης και ορίζει μια μέθοδοkeys(), δημιουργείται ένα λεξικό καλώντας το__getitem__() στο όρισμα με κάθε κλειδί που επιστρέφεται από τη μέθοδο. Διαφορετικά, το όρισμα θέσης πρέπει να είναι ένα αντικείμενοiterable. Κάθε στοιχείο στο iterable πρέπει από μόνο του να είναι ένας iterable με ακριβώς δύο στοιχεία. Το πρώτο στοιχείο κάθε στοιχείου γίνεται κλειδί στο νέο λεξικό και το δεύτερο στοιχείο η αντίστοιχη τιμή. Εάν ένα κλειδί εμφανίζεται περισσότερες από μία φορές, η τελευταία τιμή για αυτό το κλειδί γίνεται η αντίστοιχη τιμή στο νέο λεξικό.

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

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

Τα λεξικά συγκρίνονται ως ίσα εάν και μόνο εάν έχουν τα ίδια ζεύγη(key,value) (ανεξάρτητα από τη σειρά). Οι συγκρίσεις διάταξης (“<”, “<=”, “>=”, “>”) κάνουν raise τηνTypeError. Για να επεξηγηθεί η δημιουργία λεξικού και η ισότητα, τα ακόλουθα παραδείγματα επιστρέφουν όλα ένα λεξικό ίσο με{"one":1,"two":2,"three":3}:

>>>a=dict(one=1,two=2,three=3)>>>b={'one':1,'two':2,'three':3}>>>c=dict(zip(['one','two','three'],[1,2,3]))>>>d=dict([('two',2),('one',1),('three',3)])>>>e=dict({'three':3,'one':1,'two':2})>>>f=dict({'one':1,'three':3},two=2)>>>a==b==c==d==e==fTrue

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

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

>>>d={"one":1,"two":2,"three":3,"four":4}>>>d{'one': 1, 'two': 2, 'three': 3, 'four': 4}>>>list(d)['one', 'two', 'three', 'four']>>>list(d.values())[1, 2, 3, 4]>>>d["one"]=42>>>d{'one': 42, 'two': 2, 'three': 3, 'four': 4}>>>deld["two"]>>>d["two"]=None>>>d{'one': 42, 'three': 3, 'four': 4, 'two': None}

Άλλαξε στην έκδοση 3.7:Η σειρά λεξικού είναι εγγυημένη ότι είναι η σειρά εισαγωγής. Αυτή η συμπεριφορά ήταν μια λεπτομέρεια υλοποίηση της CPython από την έκδοση 3.6.

Αυτές είναι οι λειτουργίες που υποστηρίζουν τα λεξικά (και επομένως, θα πρέπει να υποστηρίζουν και προσαρμοσμένους τύπους αντιστοίχισης επίσης):

list(d)

Επιστρέφει μια λίστα με όλα τα κλειδιά που χρησιμοποιούνται στο λεξικόd.

len(d)

Επιστρέφει τον αριθμό των στοιχείων στο λεξικόd.

d[key]

Επιστρέφει το στοιχείο τουd με το κλειδίkey. Κάνει raise μιαKeyError εάν τοkey δεν υπάρχει για να αντιστοιχηθεί.

Εάν μια υποκλάση ενός λεξικού ορίζει μια μέθοδο__missing__() και τοkey δεν υπάρχει, η λειτουργίαd[key] καλεί αυτήν την μέθοδο με το κλειδίkey ως όρισμα. Στη συνέχεια, η λειτουργίαd[key] επιστρέφει ή κάνει raise ό, τι επιστρέφεται ή γίνεται raise από την κλήση__missing__(key). Καμία άλλη λειτουργία ή μέθοδος δεν επικαλεί την__missing__(). Εάν το__missing__() δεν έχει οριστεί, γίνεται raiseKeyError. To__missing__() πρέπει να είναι μέθοδος∙ δεν μπορεί να είναι ένα στιγμιότυπο μεταβλητής:

>>>classCounter(dict):...def__missing__(self,key):...return0...>>>c=Counter()>>>c['red']0>>>c['red']+=1>>>c['red']1

Το παραπάνω παράδειγμα δείχνει μέρος της υλοποίησης τουcollections.Counter. Μια διαφορετική μέθοδος__missing__ χρησιμοποιείται από τηνcollections.defaultdict.

d[key]=value

Ορίζει τοd[key] στοvalue.

deld[key]

Αφαιρεί τοd[key] από τοd. Κάνει raise έναKeyError εάν τοkey δεν υπάρχει για αντιστοίχιση.

keyind

ΕπιστρέφειTrue εάν τοd έχει ένα κλειδίkey, διαφορετικάFalse.

keynotind

Ισοδυναμεί μεnotkeyind.

iter(d)

Επιστρέφει έναν iterator πάνω από τα κλειδιά του λεξικού. Αυτή είναι μια συντόμευση γιαiter(d.keys()).

clear()

Αφαιρεί όλα τα στοιχεία από το λεξικό.

copy()

Επιστρέφει ένα ρηχό αντίγραφο του λεξικού.

classmethodfromkeys(iterable,value=None,/)

Δημιουργεί ένα νέο λεξικό με κλειδιά από τοiterable και τιμές ωςvalue.

Τοfromkeys() είναι μια μέθοδος κλάσης που επιστρέφει ένα νέο λεξικό. Η τιμήvalue ορίζεται από προεπιλογή σεNone. Όλες οι τιμές αναφέρονται σε ένα μόνο στιγμιότυπο, επομένως γενικά δεν έχει νόημα για τοvalue να είναι μεταβλητό αντικείμενο, όπως μια κενή λίστα. Για να λάβετε διαφορετικές τιμές, χρησιμοποιήστε αντ” αυτού έναdict comprehension.

get(key,default=None,/)

Επιστρέφει την τιμή για τοkey εάν τοkey είναι στο λεξικό, αλλιώςdefault. Εάν τοdefault δεν δίνεται, ορίζεται από προεπιλογή σεNone, έτσι ώστε αυτή η μέθοδος να μην κάνει raise μιαKeyError.

items()

Επιστρέφει μια νέα όψη των στοιχείων του λεξικού ((key,value) ζεύγη). Δείτε τηνdocumentation of view objects.

keys()

Επιστρέφει μια νέα όψη των κλειδιών του λεξικού. Δείτε τοdocumentation of view objects.

pop(key[,default])

Εάν τοkey βρίσκεται στο λεξικό, αφαιρείται και επιστρέφει την τιμή του, διαφορετικά επιστρέφειdefault. Εάνdefault δεν δίνεται και τοkey δεν είναι στο λεξικό, γίνεται raise έναKeyError.

popitem()

Αφαιρεί και επιστρέφει ένα ζεύγος(key,value) από το λεξικό. Τα ζεύγη επιστρέφονται με τη σειράLIFO.

Η μέθοδοςpopitem() είναι χρήσιμη για καταστροφική επανάληψη σε ένα λεξικό, όπως χρησιμοποιείται συχνά σε αλγόριθμους συνόλου. Εάν το λεξικό είναι κενό, η κλήση τηςpopitem() κάνει raise έναKeyError.

Άλλαξε στην έκδοση 3.7:Η σειρά LIFO είναι πλέον εγγυημένη. Σε προηγούμενες εκδόσεις, ηpopitem() επιστρέφει ένα αυθαίρετο ζεύγος κλειδιού/τιμής.

reversed(d)

Επιστρέφει έναν αντίστροφο iterator πάνω από τα κλειδιά του λεξικού. Αυτή είναι μια συντόμευση γιαreversed(d.keys()).

Added in version 3.8.

setdefault(key,default=None,/)

Εάν τοkey βρίσκεται στο λεξικό, επιστρέφει την τιμή του. Εάν όχι, εισάγετε τοkey με τιμήdefault και επιστρέφειdefault. Τοdefault από προεπιλογή είναιNone.

update([other])

Ενημερώνει το λεξικό με τα ζεύγη κλειδιών/τιμών από τοother, αντικαθιστώντας τα υπάρχοντα κλειδιά. ΕπιστρέφειNone.

Ηupdate() δέχεται είτε ένα άλλο αντικείμενο με τη μέθοδοkeys() (στην περίπτωση αυτή το__getitem__() καλείται με κάθε κλειδί που επιστρέφεται από τη μέθοδο) είτε ένα iterable από ζεύγη κλειδιών/τιμών (ως πλειάδες ή άλλα iterables μήκους δύο). Εάν καθορίζονται ορίσματα λέξεων-κλειδιών, το λεξικό ενημερώνεται στη συνέχεια με αυτά τα ζεύγη κλειδιών/τιμών:d.update(red=1,blue=2).

values()

Επιστρέφει μια νέα όψη των τιμών του λεξικού. Δείτε τηνdocumentation of view objects.

Μια σύγκριση ισότητας μεταξύ μιας όψηςdict.values() και μιας άλλης θα επιστρέφει πάνταFalse. Αυτό ισχύει επίσης όταν συγκρίνετε τοdict.values() με τον εαυτό της:

>>>d={'a':1}>>>d.values()==d.values()False
d|other

Δημιουργεί ένα νέο λεξικό με τα συγχωνευμένα κλειδιά και τις τιμές τωνd καιother, τα οποία πρέπει να είναι και τα δύο λεξικά. Οι τιμές τουother έχουν προτεραιότητα όταν τα κλειδιά τωνd καιother είναι κοινά.

Added in version 3.9.

d|=other

Ενημερώνει το λεξικόd με κλειδιά και τιμές από τοother, που μπορεί να είναι είτεmapping είτεiterable ζευγάρι κλειδιών/τιμών. Οι τιμές τουother έχουν προτεραιότητα όταν τα κλειδιά των τοd καιother είναι κοινά.

Added in version 3.9.

Τα λεξικά και οι όψεις λεξικών είναι αναστρέψιμες.

>>>d={"one":1,"two":2,"three":3,"four":4}>>>d{'one': 1, 'two': 2, 'three': 3, 'four': 4}>>>list(reversed(d))['four', 'three', 'two', 'one']>>>list(reversed(d.values()))[4, 3, 2, 1]>>>list(reversed(d.items()))[('four', 4), ('three', 3), ('two', 2), ('one', 1)]

Άλλαξε στην έκδοση 3.8:Τα λεξικά είναι πλέον αναστρέψιμα.

Δείτε επίσης

Ηtypes.MappingProxyType μπορεί να χρησιμοποιηθεί για τη δημιουργία μιας όψης μόνο για ανάγνωση μιαςdict.

Αντικείμενα όψης λεξικού

Τα αντικείμενα που επιστρέφονται από τιςdict.keys(),dict.values() anddict.items() είναιόψεις αντικειμένων (view objects). Παρέχουν μια δυναμική όψη στις εγγραφές του λεξικού, που σημαίνει ότι όταν αλλάζει το λεξικό, η όψη αντικατοπτρίζει αυτές τις αλλαγές.

Οι όψεις λεξικού μπορούν να γίνουν iterate για την απόδοση των αντίστοιχων δεδομένων τους και την υποστήριξη ελέγχων για το αν είναι μέρος του:

len(dictview)

Επιστρέφει τον αριθμό των καταχωρήσεων στο λεξικό.

iter(dictview)

Επιστρέφει έναν iterator πάνω στα κλειδιά, τις τιμές ή τα στοιχεία (που αντιπροσωπεύονται ως πλειάδες (tuples) του(key,value) στο λεξικό.

Τα κλειδιά και οι τιμές επαναλαμβάνονται με την σειρά εισαγωγής. Αυτό επιτρέπει τη δημιουργία ζευγών(value,key) χρησιμοποιώντας τηzip():pairs=zip(d.values(),d.keys()). Ένας άλλος τρόπος είναι να δημιουργήσετε την ίδια λίστα είναιpairs=[(v,k)for(k,v)ind.items()].

Το iterate όψεων κατά την προσθήκη ή τη διαγραφή καταχωρήσεων στο λεξικό μπορεί να κάνει raise μιαRuntimeError ή να αποτύχει το iterate σε όλες τις καταχωρήσεις.

Άλλαξε στην έκδοση 3.7:Η σειρά λεξικού είναι εγγυημένη σειρά εισαγωγής.

xindictview

ΕπιστρέφειTrue εάν τοx βρίσκεται στα κλειδιά του λεξικού, τις τιμές ή τα στοιχεία του υποκείμενου λεξικού (στην τελευταία περίπτωση, τοx θα πρέπει να είναι μια(key,value) πλειάδα (tuple)).

reversed(dictview)

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

Άλλαξε στην έκδοση 3.8:Οι όψεις λεξικού είναι πλέον αναστρέψιμες.

dictview.mapping

Επιστρέφει μιαtypes.MappingProxyType που αναδιπλώνει το αρχικό λεξικό στο οποίο αναφέρεται η όψη.

Added in version 3.10.

Οι όψεις κλειδιών μοιάζουν με σύνολο καθώς οι καταχωρίσεις τους είναι μοναδικές καιhashable. Οι όψεις στοιχείων έχουν επίσης λειτουργίες που μοιάζουν με σύνολο, καθώς τα ζεύγη (κλειδί, τιμή) είναι μοναδικά και τα κλειδιά μπορούν να κατακερματιστούν. Εάν όλες οι τιμές σε μία όψη στοιχείων μπορούν επίσης να κατακερματιστούν, τότε η όψη στοιχείων μπορεί να διαλειτουργήσει με άλλα σύνολα. (Οι όψεις τιμών δεν αντιμετωπίζονται ως σύνολο, καθώς οι καταχωρίσεις δεν είναι γενικά μοναδικές.) Για όψεις που μοιάζουν με σύνολο, όλες οι λειτουργίες που ορίζονται για την αφηρημένη βασική κλάσηcollections.abc.Set είναι διαθέσιμες (για παράδειγμα, )``==``,<, or^). Κατά τη χρήση τελεστών συνόλου, οι όψεις που μοιάζουν με σύνολο δέχονται οποιοδήποτε iterable ως άλλο τελεστή, σε αντίθεση με τα σύνολα που δέχονται μόνο σύνολα ως είσοδο.

Ένα παράδειγμα χρήσης όψης λεξικού:

>>>dishes={'eggs':2,'sausage':1,'bacon':1,'spam':500}>>>keys=dishes.keys()>>>values=dishes.values()>>># iteration>>>n=0>>>forvalinvalues:...n+=val...>>>print(n)504>>># keys and values are iterated over in the same order (insertion order)>>>list(keys)['eggs', 'sausage', 'bacon', 'spam']>>>list(values)[2, 1, 1, 500]>>># view objects are dynamic and reflect dict changes>>>deldishes['eggs']>>>deldishes['sausage']>>>list(keys)['bacon', 'spam']>>># set operations>>>keys&{'eggs','bacon','salad'}{'bacon'}>>>keys^{'sausage','juice'}=={'juice','sausage','bacon','spam'}True>>>keys|['juice','juice','juice']=={'bacon','spam','juice'}True>>># get back a read-only proxy for the original dictionary>>>values.mappingmappingproxy({'bacon': 1, 'spam': 500})>>>values.mapping['spam']500

Τύποι Διαχείρισης Περιεχομένου

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

contextmanager.__enter__()

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

Ένα παράδειγμα ενός διαχειριστή περιεχομένου που επιστρέφει ο ίδιος είναι έναfile object. Τα αντικείμενα αρχείου επιστρέφουν μόνα τους από __enter__() για να επιτρέψουν στοopen() να χρησιμοποιηθεί ως έκφραση περιεχομένου σε μια δήλωσηwith.

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

contextmanager.__exit__(exc_type,exc_val,exc_tb)

Τερματίζει από το περιεχόμενο χρόνου εκτέλεσης και επιστρέφει ένα Boolean δείκτη που υποδεικνύει εάν κάποια εξαίρεση που προέκυψε θα πρέπει να καταργηθεί. Εάν προκύψει μια εξαίρεση κατά την εκτέλεση του σώματος της δήλωσηςwith, τα ορίσματα περιέχουν τον τύπο εξαίρεσης, την τιμή και τις πληροφορίες ανίχνευσης. Διαφορετικά, και τα τρία ορίσματα είναιNone.

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

Η εξαίρεση που διαβιβάστηκε δεν θα πρέπει ποτέ να επανατοποθετηθεί ρητά - αντίθετα, αυτή η μέθοδος θα πρέπει να επιστρέψει μια ψευδή τιμή για να υποδείξει ότι η μέθοδος ολοκληρώθηκε με επιτυχία και δεν θέλει να αποκρύψει την εξαίρεση που έχει γίνει raise. Αυτό επιτρέπει στον κώδικα διαχείρισης περιεχομένου να εντοπίζει εύκολα εάν μια μέθοδος__exit__() έχει πράγματι αποτύχει.

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

Οι decorators της Pythongenerators καιcontextlib.contextmanager παρέχουν έναν βολικό τρόπο υλοποίησης αυτών των πρωτοκόλλων. Εάν μια συνάρτηση γεννήτριας είναι decorated με τονcontextlib.contextmanager decorator, θα επιστρέψει έναν διαχειριστή περιεχομένου που εφαρμόζει τις απαραίτητες μεθόδους__enter__() και__exit__(), αντί του iterator που παράγεται από μια undecorated συνάρτηση γεννήτριας.

Λάβετε υπόψη ότι δεν υπάρχει συγκεκριμένη υποδοχή για καμία από αυτές τις μεθόδους στη δομή τύπου για αντικείμενα Python στο Python/C API. Οι τύποι επεκτάσεων που θέλουν να ορίσουν αυτές τις μεθόδους πρέπει να τις παρέχουν ως μια κανονική μέθοδο προσβάσιμη στην Python. Σε σύγκριση με την επιβάρυνση της ρύθμισης στο πλαίσιο του χρόνου εκτέλεσης, η επιβάρυνση μιας απλής αναζήτησης κλάσης λεξικού είναι αμελητέα.

Τύποι Annotation τύπου —Generic Alias,Union

Οι βασικοί ενσωματωμένοι τύποι γιαtype annotations είναιGeneric Alias καιUnion.

Τύπος Generic Alias

Τα αντικείμεναGenericAlias δημιουργούνται γενικά μεsubscripting κλάση. Χρησιμοποιούνται πιο συχνά μεcontainer classes, όπωςlist ήdict.Για παράδειγμα, τοlist[int] είναι ένα αντικείμενοGenericAlias που δημιουργήθηκε με την εγγραφή της κλάσηςlist με το όρισμαint. Τα αντικείμεναGenericAlias προορίζονται κυρίως για χρήση μεtype annotations.

Σημείωση

Γενικά είναι δυνατή η εγγραφή μιας κλάσης μόνο εάν η κλάση εφαρμόζει την ειδική μέθοδο__class_getitem__().

Ένα αντικείμενοGenericAlias λειτουργεί ως διακομιστής μεσολάβησης (proxy) για ένανgeneric type, υλοποιώνταςparameterized generics.

Για μια κλάση container, το(α) όρισμα(τα) που παρέχει σε μιαsubscription της κλάσης μπορεί να υποδεικνύει τον(ους) τύπο(ους) των στοιχείων που περιέχει ένα αντικείμενο. Για παράδειγμα, τοset[bytes] μπορεί να χρησιμοποιηθεί σε annotations τύπου για να υποδηλώσει έναset στο οποίο όλα τα στοιχεία είναι τύπουbytes.

Για μια κλάση που ορίζει__class_getitem__() αλλά δεν είναι container, τα ορίσματα που παρέχονται σε μια συνδρομή της κλάσης θα υποδεικνύουν συχνά τον τύπο ή τους τύπους επιστροφής μιας ή περισσότερων μεθόδων που ορίζονται σε ένα αντικείμενο. Για παράδειγμα, τοregularexpressions μπορούν να χρησιμοποιηθούν τόσο στον τύπο δεδομένωνstr όσο και στον τύπο δεδομένωνbytes:

  • Εάνx=re.search('foo','foo'), τοx θα είναι ένα αντικείμενοre.Match όπου επιστρέφονται οι τιμές του τοx.group(0) και τοx[0] θα είναι και τα δύο τύπουstr. Μπορούμε να αναπαραστήσουμε αυτό το είδος αντικειμένου σε σχολιασμούς τύπου με τοGenericAliasre.Match[str].

  • Εάνy=re.search(b'bar',b'bar'), (σημειώστε τοb γιαbytes), τοy θα είναι επίσης μια παρουσία τουre.Match, αλλά οι επιστρεφόμενες τιμές τωνy.group(0) καιy[0] θα είναι και οι δύο τύπουbytes. Στους τύπους annotations, θα αντιπροσωπεύαμε αυτήν την ποικιλία αντικειμένωνre.Match με τοre.Match[bytes].

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

T[X,Y,...]

Δημιουργεί έναGenericAlias που αντιπροσωπεύει έναν τύποT παραμετροποιημένο από τύπουςX,Y, και άλλα ανάλογα με τοT που χρησιμοποιείται. Για παράδειγμα, μια συνάρτηση που αναμένει μιαlist που περιέχει στοιχεία τηςfloat:

defaverage(values:list[float])->float:returnsum(values)/len(values)

Ένα άλλο παράδειγμα για αντικείμεναmapping, χρησιμοποιώντας έναdict,που είναι ένας generic τύπος που αναμένει δύο παραμέτρους τύπου που αντιπροσωπεύουν τον τύπο κλειδιού και τον τύπο τιμής. Σε αυτό το παράδειγμα, η συνάρτηση αναμένει έναdict με κλειδιά τύπουstr και τιμές τύπουint:

defsend_post_request(url:str,body:dict[str,int])->None:...

Οι ενσωματωμένες συναρτήσεις (built-in)isinstance() καιissubclass() δεν δέχονται τους τύπουςGenericAlias για το δεύτερο όρισμά τους:

>>>isinstance([1,2],list[str])Traceback (most recent call last):  File"<stdin>", line1, in<module>TypeError:isinstance() argument 2 cannot be a parameterized generic

Ο χρόνος εκτέλεσης Python δεν επιβάλλειtype annotations. Αυτό επεκτείνεται σε generic τύπους και στις παραμέτρους τύπου τους. Κατά τη δημιουργία ενός αντικειμένου container από έναGenericAlias, τα στοιχεία στο container δεν ελέγχονται ως προς τον τύπο τους. Για παράδειγμα, ο ακόλουθος κώδικας αποθαρρύνεται, αλλά θα εκτελεστεί χωρίς σφάλματα:

>>>t=list[str]>>>t([1,2,3])[1, 2, 3]

Επιπλέον, τα παραμετροποιημένα generics διαγράφουν τις παραμέτρους τύπου κατά τη δημιουργία αντικειμένου:

>>>t=list[str]>>>type(t)<class 'types.GenericAlias'>>>>l=t()>>>type(l)<class 'list'>

Η κλήσηrepr() ήstr() σε ένα generic δείχνει τον παραμετροποιημένο τύπο:

>>>repr(list[int])'list[int]'>>>str(list[int])'list[int]'

Η μέθοδος__getitem__() των generic containers θα κάνει raise μια εξαίρεση για την απαγόρευση λαθών όπωςdict[str][str]:

>>>dict[str][str]Traceback (most recent call last):...TypeError:dict[str] is not a generic class

Ωστόσο, τέτοιες εκφράσεις είναι έγκυρες όταν χρησιμοποιούνται μεταβλητές τύπουtype variables. Το ευρετήριο πρέπει να έχει τόσα στοιχεία όσα και τα στοιχεία μεταβλητής τύπου στο αντικείμενοGenericAlias__args__.

>>>fromtypingimportTypeVar>>>Y=TypeVar('Y')>>>dict[str,Y][int]dict[str, int]

Τυπικές Γενικές Κλάσεις

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

Ειδικά Χαρακτηριστικά αντικειμένωνGenericAlias

Όλα τα παραμετροποιημένα generics εφαρμόζουν ειδικά χαρακτηριστικά μόνο για ανάγνωση.

genericalias.__origin__

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

>>>list[int].__origin__<class 'list'>
genericalias.__args__

Αυτό το χαρακτηριστικό είναι μιαtuple (πιθανώς μήκους 1) generic τύπων που μεταβιβάστηκαν στο αρχικό__class_getitem__() της generic κλάσης:

>>>dict[str,list[int]].__args__(<class 'str'>, list[int])
genericalias.__parameters__

Αυτό το χαρακτηριστικό είναι μία νωχελικά υπολογισμένη πλειάδα (tuple) (πιθανώς κενή) μεταβλητών μοναδικού τύπου που βρίσκονται στο__args__:

>>>fromtypingimportTypeVar>>>T=TypeVar('T')>>>list[T].__parameters__(~T,)

Σημείωση

Ένα αντικείμενοGenericAlias με παραμέτρουςtyping.ParamSpec ενδέχεται να μην έχει σωστές__parameters__ μετά την αντικατάσταση επειδή τοtyping.ParamSpec προορίζεται κυρίως για έλεγχο στατικού τύπου.

genericalias.__unpacked__

Ένα boolean που ισχύει αν το alias έχει αποσυμπιεστεί χρησιμοποιώντας τον τελεστή* (δείτε τοTypeVarTuple).

Added in version 3.11.

Δείτε επίσης

PEP 484 - Type Hints

Παρουσιάζοντας το framework της Python για τύπους annotations.

PEP 585 - Τύπος Generics Συμβουλών στις Τυπικές Συλλογές

Εισαγωγή της δυνατότητας εγγενούς παραμετροποίησης κλάσεων τυπικής βιβλιοθήκης, υπό την προϋπόθεση ότι εφαρμόζουν τη μέθοδο ειδικής κλάσης__class_getitem__().

ΤαGenerics,user-defined generics καιtyping.Generic

Τεκμηρίωση για τον τρόπο υλοποίησης generic κλάσεων που μπορούν να παραμετροποιηθούν κατά το χρόνο εκτέλεσης και να κατανοηθούν από στατικούς ελεγκτές τύπων.

Added in version 3.9.

Τύπος Ένωσης

Ένα αντικείμενο ένωσης διατηρεί την τιμή της λειτουργίας| (bitwise or) σε πολλαπλά αντικείμεναtype objects. Αυτοί οι τύποι προορίζονται κυρίως γιαtype annotations. Η έκφραση τύπου ένωσης επιτρέπει την καθαρότερη σύνταξη υποδείξεων σε σύγκριση με την εγγραφήtyping.Union.

X|Y|...

Ορίζει ένα αντικείμενο ένωσης που περιέχει τύπουςX,Y, και ούτω καθεξής. ΤοX|Y σημαίνει είτε X είτε Y. Είναι ισοδύναμο με τοtyping.Union[X,Y]. Για παράδειγμα, η ακόλουθη συνάρτηση αναμένει ένα όρισμα τύπουint orfloat:

defsquare(number:int|float)->int|float:returnnumber**2

Σημείωση

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

union_object==other

Τα αντικείμενα ένωσης μπορούν να ελεγχθούν για ισότητα με άλλα αντικείμενα ένωσης. Λεπτομέρειες:

  • Οι ενώσεις των ενώσεων ισοπεδώνονται:

    (int|str)|float==int|str|float
  • Οι περιττοί τύποι καταργούνται:

    int|str|int==int|str
  • Κατά τη σύγκριση των ενώσεων, η σειρά αγνοείται:

    int|str==str|int
  • Δημιουργεί στιγμιότυπα τηςtyping.Union:

    int|str==typing.Union[int,str]type(int|str)istyping.Union
  • Οι προαιρετικοί τύποι μπορούν να γραφτούν ως ένωση μεNone:

    str|None==typing.Optional[str]
isinstance(obj,union_object)
issubclass(obj,union_object)

Οι κλήσεις σεisinstance() καιissubclass() υποστηρίζονται επίσης με ένα αντικείμενο ένωσης:

>>>isinstance("",int|str)True

Ωστόσο, τοparameterized generics σε αντικείμενα ένωσης δεν μπορούν να ελεγχθούν:

>>>isinstance(1,int|list[int])# short-circuit evaluationTrue>>>isinstance([1],int|list[int])Traceback (most recent call last):...TypeError:isinstance() argument 2 cannot be a parameterized generic

Ο τύπος που εκτίθεται από τον χρήστη για το αντικείμενο ένωσης μπορεί να προσπελαστεί από τοtypes.UnionType και να χρησιμοποιηθεί για ελέγχουςisinstance().

>>>importtyping>>>isinstance(int|str,typing.Union)True>>>typing.Union()Traceback (most recent call last):  File"<stdin>", line1, in<module>TypeError:cannot create 'typing.Union' instances

Σημείωση

Η μέθοδος__or__() για αντικείμενα τύπου προστέθηκε για να υποστηρίξει τη σύνταξηX|Y. Εάν μια μετακλάση υλοποιεί__or__(), η Ένωση μπορεί να την παρακάμψει:

>>>classM(type):...def__or__(self,other):...return"Hello"...>>>classC(metaclass=M):...pass...>>>C|int'Hello'>>>int|Cint | C

Δείτε επίσης

PEP 604 – Το PEP προτείνει τη σύνταξηX|Y και τον τύπο Ένωση.

Added in version 3.10.

Άλλαξε στην έκδοση 3.14:Τα αντικείμενα Union είναι πλέον στιγμιότυπα τουtyping.Union. Προηγουμένως, ήταν στιγμιότυπα τηςtypes.UnionType, το οποίο παραμείνει ένα ψευδώνυμο για τηtyping.Union.

Άλλοι Ενσωματωμένοι (built-in) Τύποι

Ο διερμηνέας υποστηρίζει πολλά άλλα είδη αντικειμένων. Τα περισσότερα από αυτά υποστηρίζουν μόνο μία ή δύο λειτουργίες.

Modules

Η μόνη ειδική λειτουργία σε ένα module είναι η πρόσβαση χαρακτηριστικών:m.name, όπου τοm είναι ένα module και τοname έχει πρόσβαση σε ένα όνομα που ορίζεται στον πίνακα συμβόλων τουm. Τα χαρακτηριστικά του module μπορούν να εκχωρηθούν. (Σημειώστε ότι η δήλωσηimport δεν είναι, αυστηρά, μια λειτουργία σε ένα αντικείμενο module· τοimportfoo δεν απαιτεί να υπάρχει ένα αντικείμενο module με το όνομαfoo αλλά απαιτεί έναν (εξωτερικό)definition για ένα module που ονομάζεταιfoo κάπου.)

Ένα ειδικό χαρακτηριστικό κάθε module είναι__dict__. Αυτό είναι το λεξικό που περιέχει τον πίνακα συμβόλων της ενότητας. Η τροποποίηση αυτού του λεξικού θα αλλάξει στην πραγματικότητα τον πίνακα συμβόλων του module, αλλά η απευθείας εκχώρηση στο χαρακτηριστικό__dict__ δεν είναι δυνατή (μπορείτε να γράψετεm.__dict__['a']=1, που ορίζει τοm.a να είναι1, αλλά δεν μπορείτε να γράψετεm.__dict__={}). Δεν συνίσταται η απευθείας τροποποίηση του__dict__.

Τα modules που είναι ενσωματωμένες στον διερμηνέα γράφονται ως εξής:<module'sys'(built-in)>. Εάν φορτωθούν από ένα αρχείο, γράφονται ως<module'os'from'/usr/local/lib/pythonX.Y/os.pyc'>.

Κλάσεις και Στιγμιότυπα Κλάσης

ΔείτεObjects, values and types καιClass definitions για αυτά.

Συναρτήσεις

Τα αντικείμενα συναρτήσεων δημιουργούνται από ορισμούς συναρτήσεων. Η μόνη λειτουργία σε ένα αντικείμενο συνάρτησης είναι να το ονομάσουμε:func(argument-list).

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

Δείτε τοFunction definitions για περισσότερες πληροφορίες.

Μέθοδοι

Οι μέθοδοι είναι συναρτήσεις που καλούνται χρησιμοποιώντας το notation χαρακτηριστικών. Υπάρχουν δύο είδη:built-in methods (όπως ηappend() στις λίστες) καιclass instance method. Οι ενσωματωμένες μέθοδοι περιγράφονται με τους τύπους που τις υποστηρίζουν.

Εάν αποκτήσετε πρόσβαση σε μια μέθοδο (μια συνάρτηση που ορίζεται μια namespace κλάση) μέσω ενός στιγμιοτύπου, λαμβάνετε ένα ειδικό αντικείμενο: ένα αντικείμενοbound method (ονομάζεται επίσηςinstance method). Όταν καλείται, θα προσθέσει το όρισμαself στη λίστα ορισμάτων. Οι δεσμευμένες μέθοδοι έχουν δύο ειδικά χαρακτηριστικά μόνο για ανάγνωση:m.__self__ είναι το αντικείμενο στο οποίο λειτουργεί η μέθοδος καιm.__func__ είναι η συνάρτηση που υλοποιεί την μέθοδο. Η κλήση τουm(arg-1,arg-2,...,arg-n) είναι απολύτως ισοδύναμη με την κλήση τουm.__func__(m.__self__,arg-1,arg-2,...,arg-n).

Όπως ταfunction objects, τα αντικείμενα δεσμευμένης μεθόδου υποστηρίζουν τη λήψη αυθαίρετων χαρακτηριστικών. Ωστόσο, δεδομένου ότι τα χαρακτηριστικά της μεθόδου αποθηκεύονται στην πραγματικότητα στο υποκείμενο αντικείμενο συνάρτησης (method.__func__), ο ορισμός χαρακτηριστικών μεθόδου σε δεσμευμένες μεθόδους δεν επιτρέπεται. Η προσπάθεια ορισμού ενός χαρακτηριστικού σε μια μέθοδο έχει ως αποτέλεσμα να γίνει raise ηAttributeError. Για να ορίσετε ένα χαρακτηριστικό μεθόδου πρέπει να το ορίσετε ρητά στο υποκείμενο αντικείμενο συνάρτησης:

>>>classC:...defmethod(self):...pass...>>>c=C()>>>c.method.whoami='my name is method'# can't set on the methodTraceback (most recent call last):  File"<stdin>", line1, in<module>AttributeError:'method' object has no attribute 'whoami'>>>c.method.__func__.whoami='my name is method'>>>c.method.whoami'my name is method'

Δείτε τοInstance methods για περισσότερες πληροφορίες.

Αντικείμενα Κώδικα

Τα αντικείμενα κώδικα χρησιμοποιούνται από την υλοποίηση για να αναπαραστήσουν τον «ψευδο-μεταγλωττισμένο» εκτελέσιμο κώδικα Python, όπως ένα σώμα συνάρτησης. Διαφέρουν από τα αντικείμενα συνάρτησης επειδή δεν περιέχουν αναφορά στο παγκόσμιο (global) περιβάλλον εκτέλεσης τους. Τα αντικείμενα κώδικα επιστρέφονται από την ενσωματωμένη συνάρτησηcompile() και μπορεί να εξαχθεί από τα αντικείμενα συνάρτησης μέσω του χαρακτηριστικού τους__code__. Δείτε επίσης το modulecode.

Η πρόσβαση στη__code__ κάνει raise έναauditing eventobject.__getattr__ με ορίσματαobj και"__code__".

Ένα αντικείμενο κώδικα μπορεί να εκτελεστεί ή να αξιολογηθεί περνώντας το (αντί για πηγαία συμβολοσειρά) στις ενσωματωμένες συναρτήσειςexec() ήeval().

ΔείτεThe standard type hierarchy για περισσότερες πληροφορίες.

Τύποι Αντικειμένων

Τα αντικείμενα τύπου αντιπροσωπεύουν τους διάφορους τύπους αντικειμένων. Ο τύπος ενός αντικειμένου προσεγγίζεται από την ενσωματωμένη συνάρτησηtype(). Δεν υπάρχουν ειδικές λειτουργίες στους τύπους. Το τυπικό (standard) moduletypes ορίζει ονόματα για όλους τους τυπικούς ενσωματωμένους τύπους.

Οι τύποι γράφονται ως εξής:<class'int'>.

Το Αντικείμενο Null

Αυτό το αντικείμενο επιστρέφεται από συναρτήσεις που δεν επιστρέφουν ρητά μια τιμή. Δεν υποστηρίζει ειδικές λειτουργίες. Υπάρχει ακριβώς ένα μηδενικό αντικείμενο, που ονομάζεταιNone (ένα ενσωματωμένο όνομα). Τοtype(None)() παράγει το ίδιο singleton.

Γράφεται ωςNone.

Το αντικείμενο Ellipsis

Αυτό το αντικείμενο χρησιμοποιείται συνήθως με λειτουργία τμηματοποίησης (δείτεSlicings). Δεν υποστηρίζει ειδικές λειτουργίες. Υπάρχει ακριβώς ένα αντικείμενο έλλειψης, που ονομάζεταιEllipsis (ένα ενσωματωμένο όνομα). Τοtype(Ellipsis)() παράγει τοEllipsis singleton.

Γράφεται ωςEllipsis ή....

Το NotImplemented Αντικείμενο

Αυτό το αντικείμενο επιστρέφεται από συγκρίσεις και δυαδικές λειτουργίες όταν τους ζητείται να λειτουργήσουν σε τύπους που δεν υποστηρίζουν. Δείτε τοComparisons για περισσότερες πληροφορίες. Υπάρχει ακριβώς ένα αντικείμενοNotImplemented. Τοtype(NotImplemented)() παράγει το στιγμιότυπο singleton.

Είναι γραμμένο ωςNotImplemented.

Εσωτερικά Αντικείμενα

ΔείτεThe standard type hierarchy για αυτές τις πληροφορίες. Περιγράφειstack frame objects,traceback objects, και αντικείμενα τμηματοποίησης.

Ειδικά Χαρακτηριστικά

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

definition.__name__

Το όνομα της κλάσης, της συνάρτησης, της μεθόδου, του descriptor ή του στιγμιοτύπου generator.

definition.__qualname__

Τοqualified name της κλάσης, της συνάρτησης, της μεθόδου, του descriptor, ή του στιγμιοτύπου generator.

Added in version 3.3.

definition.__module__

Το όνομα του module στο οποίο ορίστηκε μια κλάση ή μια συνάρτηση.

definition.__doc__

Η συμβολοσειρά τεκμηρίωσης μιας κλάσης ή συνάρτησης ήNone εάν δεν έχει οριστεί.

definition.__type_params__

Οι παράμετροιtype parameters των γενικών κλάσεων, συναρτήσεων καιtype aliases. Για κλάσεις και συναρτήσεις που δεν είναι γενικές, αυτή θα είναι μια κενή πλειάδα.

Added in version 3.12.

Περιορισμός μήκους μετατροπής συμβολοσειράς ακέραιου αριθμού

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

Ο τύποςint στην CPython είναι ένας αυθαίρετος αριθμός μήκους που είναι αποθηκευμένος σε δυαδική μορφή (κοινώς γνωστός ως «bignum»). Δεν υπάρχει αλγόριθμος που να μπορεί να μετατρέψει μια συμβολοσειρά σε δυαδικό ακέραιο ή δυαδικό ακέραιο σε μια συμβολοσειρά σε γραμμικό χρόνο,εκτός εάν η βάση είναι δύναμη του 2. Ακόμη και οι πιο γνωστοί αλγόριθμοι για τη βάση 10 έχουν υποτετραγωνική πολυπλοκότητα. Η μετατροπή μιας μεγάλης τιμής όπωςint('1'*500_000) μπορεί να διαρκέσει περισσότερο από ένα δευτερόλεπτο σε μια γρήγορη CPU.

Ο περιορισμός του μεγέθους μετατροπής προσφέρει έναν πρακτικό τρόπο αποφυγής τουCVE 2020-10735.

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

Όταν μια λειτουργία υπερβαίνει το όριο, γίνεται raise μιαValueError:

>>>importsys>>>sys.set_int_max_str_digits(4300)# Illustrative, this is the default.>>>_=int('2'*5432)Traceback (most recent call last):...ValueError:Exceeds the limit (4300 digits) for integer string conversion: value has 5432 digits; use sys.set_int_max_str_digits() to increase the limit>>>i=int('2'*4300)>>>len(str(i))4300>>>i_squared=i*i>>>len(str(i_squared))Traceback (most recent call last):...ValueError:Exceeds the limit (4300 digits) for integer string conversion; use sys.set_int_max_str_digits() to increase the limit>>>len(hex(i_squared))7144>>>assertint(hex(i_squared),base=16)==i*i# Hexadecimal is unlimited.

Το προεπιλεγμένο όριο είναι 4300 ψηφία όπως προβλέπεται στοsys.int_info.default_max_str_digits. Το κατώτατο όριο που μπορεί να διαμορφωθεί είναι 640 ψηφία όπως προβλέπεται στοsys.int_info.str_digits_check_threshold.

Επαλήθευση:

>>>importsys>>>assertsys.int_info.default_max_str_digits==4300,sys.int_info>>>assertsys.int_info.str_digits_check_threshold==640,sys.int_info>>>msg=int('578966293710682886880994035146873798396722250538762761564'...'9252925514383915483333812743580549779436104706260696366600'...'571186405732').to_bytes(53,'big')...

Added in version 3.11.

Επηρεασμένα APIs

Ο περιορισμός ισχύει μόνο για δυνητικά αργές μετατροπές μεταξύint καιstr ήbytes:

  • int(string) με default βάση το 10.

  • int(string,base) για όλες τις βάσεις που δεν είναι δύναμη του 2.

  • str(integer).

  • repr(integer).

  • οποιαδήποτε άλλη μετατροπή συμβολοσειράς στη βάση 10, για παράδειγμαf"{integer}","{}".format(integer), ήb"%d"%integer.

Οι περιορισμοί δεν ισχύουν για συναρτήσεις με γραμμικό αλγόριθμο:

Διαμόρφωση ορίου

Πριν από την εκκίνηση της Python, μπορείτε να χρησιμοποιήσετε μια μεταβλητή περιβάλλοντος ή ένα δείκτη γραμμής εντολών διερμηνέα για να διαμορφώσετε το όριο:

  • PYTHONINTMAXSTRDIGITS, π.χ.PYTHONINTMAXSTRDIGITS=640python3 για να ορίσετε το όριο σε 640 ήPYTHONINTMAXSTRDIGITS=0python3 για να απενεργοποιήσετε τον περιορισμό.

  • -Xint_max_str_digits, π.χ.python3-Xint_max_str_digits=640

  • Τοsys.flags.int_max_str_digits περιέχει την τιμήPYTHONINTMAXSTRDIGITS ή-Xint_max_str_digits. Εάν και η επιλογή env var και η επιλογή-X είναι καθορισμένη, η επιλογή-X έχει προτεραιότητα. Μια τιμή-1 υποδεικνύει ότι και τα δύο δεν ορίστηκαν, επομένως χρησιμοποιήθηκε μια τιμήsys.int_info.default_max_str_digits κατά την προετοιμασία.

Από τον κώδικα, μπορείτε να επιθεωρήσετε το τρέχον όριο και να ορίσετε ένα νέο χρησιμοποιώντας αυτά ταsys APIs:

Πληροφορίες σχετικά με την προεπιλογή και το ελάχιστο μπορούν να βρεθούν στοsys.int_info:

Added in version 3.11.

Προσοχή

Ο ορισμός ενός χαμηλού ορίουμπορεί να οδηγήσει σε προβλήματα. Αν και σπάνιος, υπάρχει κώδικας που περιέχει ακέραιες σταθερές σε δεκαδικό αριθμό στην πηγή τους που υπερβαίνουν το ελάχιστο όριο. Συνέπεια της ρύθμισης του ορίου είναι ότι ο πηγαίος κώδικας Python που περιέχει δεκαδικούς ακέραιους αριθμούς μεγαλύτερους από το όριο θα αντιμετωπίσει σφάλμα κατά την ανάλυση, συνήθως κατά την εκκίνηση ή την ώρα της εισαγωγής ή ακόμα και κατά την εγκατάσταση - ανά πάσα στιγμή είναι ενημερωμένο.pyc δεν υπάρχει ήδη για τον κώδικα. Μια λύση για τον πηγαίο που περιέχει τόσο μεγάλες σταθερές είναι να τις μετατρέψετε σε δεκαεξαδική μορφή0x καθώς δεν έχει όριο.

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

Προτεινόμενη διαμόρφωση

Το προεπιλεγμένοsys.int_info.default_max_str_digits αναμένεται να είναι λογικό για τις περισσότερες εφαρμογές. Εάν η εφαρμογή σας απαιτεί διαφορετικό όριο, ορίστε το από το κύριο σημείο εισόδου σας χρησιμοποιώντας τον συμβατό με τον κώδικα της έκδοσης Python, καθώς αυτά τα API προστέθηκαν στην ενημερωμένη έκδοση κώδικα ασφαλείας σε εκδόσεις πριν από την 3.12.

Παράδειγμα:

>>>importsys>>>ifhasattr(sys,"set_int_max_str_digits"):...upper_bound=68000...lower_bound=4004...current_limit=sys.get_int_max_str_digits()...ifcurrent_limit==0orcurrent_limit>upper_bound:...sys.set_int_max_str_digits(upper_bound)...elifcurrent_limit<lower_bound:...sys.set_int_max_str_digits(lower_bound)

Εάν πρέπει να το απενεργοποιήσετε εντελώς, ορίστε το σε0.

Υποσημειώσεις

[1]

Πρόσθετε πληροφορίες σχετικά με αυτές τις ειδικές μεθόδους μπορείτε να βρείτε στο Εγχειρίδιο Αναφοράς Python (Basic customization).

[2]

Σαν συνέπεια, η λίστα[1,2] θεωρείται ίση με[1.0,2.0], και ομοίως για πλειάδες (tuples).

[3]

Πρέπει να έχουν, αφού ο parser δεν μπορεί να ξεχωρίσει τον τύπο των τελεστών.

[4](1,2,3,4)

Οι χαρακτήρες με πεζά είναι αυτοί με την ιδιότητα γενικής κατηγορίας να είναι ένας από τους «Lu» (Γράμμα, κεφαλαίο), «Ll» (Γράμμα, πεζά), ή «Lt» (Γράμμα, κεφαλαία).

[5](1,2)

Για να μορφοποιήσετε μόνο μια πλειάδα (tuple) θα πρέπει επομένως να παρέχετε μια πλειάδα singleton της οποίας το μόνο στοιχείο είναι η πλειάδα που πρόκειται να μορφοποιηθεί.