Σχόλια σε Python. Μορφοποίηση συμβολοσειρών: Μορφοποίηση τελεστών και η μέθοδος Μορφοποίηση (). §2. Μορφοποιημένη έξοδος. Η λειτουργία εκτύπωσης (). Μέθοδος μορφοποίησης ().

Σχόλια (1)

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

Η Python διακρίνει δύο τύπους σχολίων: μονής γραμμής και πολλαπλών γραμμών. Ένα σχόλιο μονής γραμμής ξεκινά με χαρακτήρα "#", μπορεί να είναι είτε σε ξεχωριστή γραμμή είτε να τελειώνει μια γραμμή με έναν κωδικό, αλλά πρέπει να είναι ένα σχόλιο μιας γραμμής, δηλ. Δεν πρέπει να χωρίζεται σε δύο γραμμές. Μπορεί να τερματίσει μια γραμμή κώδικα, αλλά δεν μπορεί να βρίσκεται στη μέση μιας γραμμής μεταξύ δύο κομματιών κώδικα. Για παράδειγμα:

i = 0 # Μετρητής βρόχου

# Ο βρόχος θα εκτελεστεί με βάση την παραπάνω συνθήκη

Τα σχόλια πολλών γραμμών περικλείονται σε τριπλά εισαγωγικά "" ". Μπορούν να χωριστούν σε πολλές γραμμές και να είναι αρκετά μεγάλα. Στην πραγματικότητα, ακόμη και να γράψετε ένα δοκίμιο. Ένα σχόλιο πολλών γραμμών πρέπει να ξεκινά από μια νέα γραμμή και μπορεί να συνεχιστεί σε άλλη γραμμές. Για παράδειγμα:

"" "Περνάμε τη λίστα για να βρούμε το απαιτούμενο στοιχείο

Αφού βρούμε, τερματίζουμε τον βρόχο και αποθηκεύουμε το αποτέλεσμα στη μεταβλητή x

Εάν δεν βρεθεί το απαιτούμενο στοιχείο, ενημερώστε τον χρήστη σχετικά "" "

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

Οι αρχάριοι προγραμματιστές, και όχι μόνο οι αρχάριοι, συχνά γράφουν αυτονόητα πράγματα στα σχόλια, κάτι σαν «δήλωσα τη μεταβλητή x εδώ». Προσπαθήστε να αποφύγετε σχόλια που αντιγράφουν την ενέργεια που εκτελείται σε ανθρώπινη γλώσσα. Πριν γράψετε ένα σχόλιο, δοκιμάστε να κάνετε ερωτήσεις στον εαυτό σας όπως «Ποιος σκοπός είναι αυτό το απόσπασμα;», «Τι σκοπό επιδιώκω με αυτό το απόσπασμα;», «Τι κάνω με αυτό το απόσπασμα;»… Μια σειρά από ερωτήσεις όπως Αυτό θα σας βοηθήσει να δημιουργήσετε το σωστό σχόλιο που θα σας βοηθήσει πραγματικά να διατηρήσετε τον κώδικά σας στο μέλλον και να τον κάνετε πιο ευανάγνωστο.

Τελεστές μορφοποίησης συμβολοσειρών

Τώρα, με την έκφραση "μορφοποίηση συμβολοσειράς", εννοούμε την επέκταση των τιμών των μεταβλητών σε μια συμβολοσειρά, δηλ. Όταν υπάρχει ανάγκη για μια γραμμή, εισάγετε τις τιμές ορισμένων μεταβλητών. Νωρίτερα το κάναμε χρησιμοποιώντας "+" - συνένωση συμβολοσειρών και "," γράφοντας αριθμητικές εκφράσεις μετά τις γραμμές. Φαινόταν, τουλάχιστον, άσχημο.

>>> a = "Γεια"

>>> b = "αγαπητέ"

>>> a + "" + β

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

Ας εξετάσουμε την ακόλουθη επιλογή:

>>> a = "Βάσια"

>>> εκτύπωση "Hello% s"% a

Γεια σου Vasya

Τι συμβαίνει? Όλα είναι αρκετά απλά. Ο τελεστής% s στη γραμμή μας αντικαθίσταται με τη μεταβλητή στα δεξιά του συμβόλου% μετά τη γραμμή μας.

Ας πάρουμε ένα άλλο παράδειγμα:

>>> όνομα = "Βάσια"

>>> επίθετο = "Pupkin"

>>> ηλικία = 25

>>> εκτύπωση "Όνομα% s, επίθετο% s, ηλικία% d"% (όνομα, επίθετο, ηλικία)

Όνομα Vasya, επίθετο Pupkin, 25 ετών

Αρχικά, παρατηρήστε ότι αν υπάρχουν περισσότερες από μία μεταβλητές, τις περνάμε σε πλειάδα (). Επίσης, ίσως έχετε παρατηρήσει ότι πέρασα τις τιμές συμβολοσειράς των μεταβλητών χρησιμοποιώντας τον τελεστή% s και τη μεταβλητή που αναφέρεται στον αριθμό χρησιμοποιώντας τον τελεστή% d. Αυτός είναι ο μόνος τρόπος που λειτουργεί. Κάθε τελεστής μπορεί να επεκταθεί σε έναν συγκεκριμένο τύπο τιμής: % s για μια συμβολοσειρά, % d για έναν αριθμό, κ.λπ. Ένας πιο λεπτομερής κατάλογος των χειριστών θα δοθεί παρακάτω.

Το πρώτο ερώτημα που τίθεται: "Πώς μπορούμε να εμφανίσουμε την τιμή μιας μεταβλητής πολλές φορές σε μία γραμμή;". Η απάντηση είναι προφανής, θα πρέπει να περάσουμε αυτήν τη μεταβλητή σε πλειάδα τόσες φορές και με τη σειρά με την οποία επεκτείνουμε τις τιμές αυτών των μεταβλητών στη συμβολοσειρά μας. Είναι αδέξιο και άβολο. Θα πρέπει πάντα να γράφουμε τις μεταβλητές με αυστηρή σειρά που να ταιριάζει με τον τρόπο με τον οποίο οι τελεστές τις επεκτείνουν σε μια γραμμή και να τις επαναλαμβάνουμε όπως απαιτείται.

Λίστα τελεστών μορφοποίησης:

% d,% i,% u

Δεκαδικός αριθμός.

Οκταδικός αριθμός.

Δεκαεξαδικός αριθμός (πεζά γράμματα).

Δεκαεξαδικός αριθμός (κεφαλαία γράμματα).

Αριθμός κινητής υποδιαστολής με εκθέτη (πεζός εκθέτης).

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

Κινούμενο σημείο (κανονικής μορφής).

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

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

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

Χορδή (κυριολεκτικά python).

Συμβολοσειρά (όπως συνήθως γίνεται αντιληπτή από τον χρήστη).

Μορφοποίηση χειριστών (προαιρετικό)

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

Οι προσδιοριστές μετατροπής γράφονται με την ακόλουθη σειρά:

2. Κλειδί (προαιρετικό), καθορίζει ποιο όρισμα από την τιμή θα αντικατασταθεί.

3. Σημαίες μετατροπής.

4. Ελάχιστο πλάτος πεδίου. Εάν *, η τιμή λαμβάνεται από την πλειάδα.

5. Ακρίβεια, ξεκινά με ".", Στη συνέχεια η επιθυμητή ακρίβεια.

6. Τροποποιητής μήκους (προαιρετικό).

7. Πληκτρολογήστε (βλ. πίνακα παραπάνω).

>>> εκτύπωση ("% (γλώσσα) s έχει% (αριθμός) 03d τύπους εισαγωγικών."% ("γλώσσα": "Python", "αριθμός": 2))

Η Python έχει 002 τύπους εισαγωγικών.

Σημαίες μετατροπής:

Η τιμή θα χρησιμοποιεί μια εναλλακτική φόρμα.

Ο ελεύθερος χώρος θα γεμίσει με μηδενικά.

Ο ελεύθερος χώρος θα γεμίσει με κενά στα δεξιά.

Ο κενός χώρος θα γεμίσει με κενά στα αριστερά.

>>> "% .2s"% "Γεια!"

>>> "%. * s"% (2, "Γεια!")

>>> "% -10d"% 25

>>> "% + 10f"% 25

>>> "% + 10s"% "Γεια"

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

Η μέθοδος μορφοποίησης για τη μορφή συμβολοσειρών ()

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

>>> όνομα = "Βάσια"

>>> επίθετο = "Pupkin"

>>> ηλικία = 25

>>> εκτύπωση "() (), ηλικία ()". μορφή (όνομα, επώνυμο, ηλικία)

Vasya Pupkin, 25 ετών

Όλα είναι αρκετά προφανή εδώ. Οι σγουρές αγκύλες () ορίζουν πού να επεκτείνονται οι μεταβλητές στη συμβολοσειρά και στη μέθοδο format (), περνάμε τις μεταβλητές για επέκταση. Με την πρώτη ματιά, τίποτα δεν έχει αλλάξει σε σύγκριση με τους τελεστές μορφοποίησης. Δεν έχουμε ακόμη κανέναν έλεγχο στην ανάπτυξή μας. Η μόνη διαφορά είναι ότι δεν χρειάζεται πλέον να απομνημονεύουμε ένα σωρό τελεστές για να επεκτείνουμε τις τιμές ΔΙΑΦΟΡΕΤΙΚΟΙ ΤΥΠΟΙ... Τίποτα, αυτό είναι μόνο η αρχή. Ας δημιουργήσουμε τη λειτουργικότητα με συνέπεια. Ας εξετάσουμε την ακόλουθη επιλογή:

>>> όνομα = "Βάσια"

>>> επίθετο = "Pupkin"

>>> ηλικία = 25

>>> εκτύπωση "(0) (1), ηλικία (2)". μορφή (όνομα, επώνυμο, ηλικία)

Vasya Pupkin, 25 ετών

Τίποτα δεν έχει αλλάξει, αλλά κάποιοι αριθμοί έχουν προστεθεί στις σγουρές αγκύλες μας. Δείτε το παρακάτω παράδειγμα:

>>> εκτύπωση "(1) (0), ηλικία (2)". μορφή (όνομα, επίθετο, ηλικία)

Pupkin Vasya, 25 ετών

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

>>> εκτύπωση "(1) (1), ηλικία (2)". μορφή (όνομα, επώνυμο, ηλικία)

Pupkin Pupkin, 25 ετών

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

>>> a = "Βάσια"

>>> b = "Κολοκυθάκι"

>>> εκτύπωση "(όνομα) (επώνυμο), ηλικία (ηλικία)". μορφή (ηλικία = γ, όνομα = α, επίθετο = β)

Vasya Pupkin, 25 ετών

Αυτό είναι ακόμα πιο ενδιαφέρον. Τα απαιτούμενα δεδομένα ήταν κάτω από τις μη ομιλούμενες μεταβλητές a, b και c. Όταν μεταβιβάζαμε αυτές τις μεταβλητές στη μέθοδό μας, τους δώσαμε ονόματα με νόημα όπως (όνομα = μεταβλητή) και στη συνέχεια χρησιμοποιήσαμε αυτά τα ονόματα στις αγκύλες μας ().

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

>>> l = ["Vasya", "Pupkin", 25]

["Vasya", "Pupkin", 25]

>>> εκτύπωση "(0) (1), ηλικία (2)". μορφή (* l)

Vasya Pupkin, 25 ετών

Όλα είναι κάτι παραπάνω από προφανή εδώ. Περάσαμε τη λίστα και αποκτήσαμε πρόσβαση στα στοιχεία της με δείκτες, αλλά όταν περάσαμε τη λίστα, πριν από τη μεταβλητή, καθορίσαμε το σύμβολο "*", το οποίο έλεγε ρητά στη μέθοδο format () ότι θα επεκτείναμε τα στοιχεία αυτής της λίστας. Τι θα συμβεί αν παραλείψουμε το "*" πριν από το σύνθετο όρισμα;

>>> εκτύπωση "(0) (1), ηλικία (2)". μορφή (l)

Traceback (πιο πρόσφατη τελευταία κλήση):

Αρχείο "", γραμμή 1, in

IndexError: πολλαπλάσιος δείκτης εκτός εύρους

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

Ομοίως, μπορούμε να περάσουμε στη μέθοδο format () και ένα λεξικό.

>>> db = ("όνομα": "Βάσια", "επώνυμο": "Κολοκυθάκι", "ηλικία": 25)

("επώνυμο": "Pupkin", "ηλικία": 25, "όνομα": "Vasya")

>>> εκτύπωση "(όνομα) (επώνυμο), ηλικία (ηλικία)". μορφή (** db)

Vasya Pupkin, 25 ετών

Αυτό είναι πολύ παρόμοιο με τη μετάδοση ορισμάτων με όνομα, η μόνη διαφορά είναι ότι περάσαμε ένα λεξικό στη μέθοδό μας. Εάν πριν περάσουμε τη λίστα καθορίσαμε έναν αστερίσκο "*", τότε πριν περάσουμε το λεξικό, βάζουμε δύο αστερίσκους "**" μπροστά από το όρισμα στη μέθοδο format () και στις σγουρές αγκύλες της συμβολοσειράς, αναφερόμαστε στα κλειδιά του περασμένου λεξικού για να επεκτείνετε τις τιμές τους ...

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

Μέθοδος μορφοποίησης () (προαιρετικό)

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

Προσοχή! Το υπόλοιπο είναι ένα απόσπασμα ενός άρθρου σχετικά με τη μέθοδο μορφής ().

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

>>> "Το όνομά σας είναι (όνομα: 10)". Μορφή (όνομα = "Reuven")

"Το όνομά σου είναι Reuven"

(Σημειώστε ότι η γραμμή είναι γεμάτη με κενά μετά το όνομα.)

Εάν πρέπει να ορίσετε τη στοίχιση στη δεξιά πλευρά του μπλοκ, χρησιμοποιήστε το σύμβολο> μεταξύ: και ενός αριθμού:

>>> "Το όνομά σας είναι (όνομα:> 10)". Μορφή (όνομα = "Reuven")

"Το όνομά σου είναι Reuven"

Και ναι, μπορείτε να δηλώσετε ρητά ότι θέλω αριστερά-δικαιολογημένα χρησιμοποιώντας το σημάδι<

Εάν πρέπει να εμφανίσετε την τιμή στο κέντρο του μπλοκ, τότε αντί για< и >χρησιμοποιείται το σύμβολο ^:

>>> "Το όνομά σας είναι (όνομα: * ^ 10)". Μορφή (όνομα = "Reuven")

"Το όνομά σου είναι ** Reuven **"

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

>>> "Η τιμή είναι $ (αριθμός).". Μορφή (αριθμός = 123)

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

Συχνά υπάρχει η επιθυμία να έχουμε περισσότερο έλεγχο στη μορφοποίηση της εξόδου από την απλή έξοδο των τιμών που χωρίζονται από ένα κενό. Φυσικά, μπορείτε να χειριστείτε μόνοι σας τις χορδές: μπορείτε να δημιουργήσετε οποιαδήποτε διάταξη μπορείτε να φανταστείτε με τις λειτουργίες slice και συγχώνευσης. Οι γραμμές έχουν μεθόδους για να τις συμπληρώνουν με κενά στο απαιτούμενο πλάτος της στήλης 1. Ένας άλλος τρόπος είναι να χρησιμοποιήσετε τον τελεστή% με μια συμβολοσειρά ως αριστερό όρισμα. Ο τελεστής% ερμηνεύει τη συμβολοσειρά στα δεξιά ως συμβολοσειρά μορφής στυλ C sprintf () που θα εφαρμοστεί στο σωστό όρισμα και επιστρέφει μια μορφοποιημένη συμβολοσειρά.

Φυσικά, ένα ακόμη ερώτημα παραμένει: πώς να αποκτήσετε μια παράσταση συμβολοσειράς για τιμές διαφορετικών τύπων; Ευτυχώς, η Python παρέχει τη δυνατότητα μετατροπής οποιασδήποτε τιμής σε συμβολοσειρά: χρησιμοποιώντας τη συνάρτηση str (). Στην πραγματικότητα, η γλώσσα παρέχει δύο συναρτήσεις για τη λήψη μιας παράστασης συμβολοσειράς - repr () (το ίδιο αποτέλεσμα μπορεί να ληφθεί με το να περικλείει απλώς μια έκφραση σε backticks: `expr`) και str (). Η πρώτη μέθοδος, για παράδειγμα, χρησιμοποιείται από τον διερμηνέα για την εκτύπωση των τιμών των παραστάσεων σε διαδραστική λειτουργία, η δεύτερη χρησιμοποιείται για την εκτύπωση των ορισμάτων με την πρόταση εκτύπωσης. Η συνάρτηση str () επιστρέφει την πιο κατάλληλη αναπαράσταση για έξοδο, εάν είναι δυνατόν, και η συνάρτηση repr () επιστρέφει τη διαδραστική είσοδο της παράστασης. Ορίστε μερικά παραδείγματα:

>>> x = 10 * 3,14

Ο αριθμός 31.4 δεν μπορεί να αναπαρασταθεί ακριβώς σε δυαδικό, οπότε:

>>> x
31.400000000000002

Ωστόσο, η συνάρτηση str () θα εκτυπώσει τον αριθμό με λογική ακρίβεια:

>>> y = 200 * 200
>>> s = "Η τιμή του x είναι" + str (x) + \
... ", η τιμή του y είναι" + str (y) + "..."
>>> εκτύπωση s
Η τιμή x είναι 31,4, η τιμή y είναι 40.000 ...

Οι μεγάλοι ακέραιοι αριθμοί γράφονται στην Python με το επίθημα "L". Από την έκδοση 1.6, η συνάρτηση str () δεν την εκτυπώνει:

>>> repr (1000L)
"1000L"
>>> str (1000L)
"1000"

Η αναπαράσταση συμβολοσειράς μπορεί να ληφθεί και για άλλους τύπους:

>>> p =
>>> ps = repr (p)
>>> ps
""
>>> `x, y, (" spam "," eggs ")".
"(31.4000000000000002, 40000, (" spam "," αυγά "))"

Η συνάρτηση repr () (ή '') προσθέτει εισαγωγικά και γράφει ειδικούς χαρακτήρες χρησιμοποιώντας ακολουθίες διαφυγής:

>>> γεια = "γεια, κόσμο \ n"
>>> εκτύπωση γεια
Γειά σου Κόσμε

>>> hellos = `γεια`
>>> εκτύπωση γεια
"γεια, κόσμο \ n"

Ας εμφανίσουμε έναν πίνακα τετραγώνων και κύβων με δύο περιγραφόμενους τρόπους:

>>> για x στην περιοχή (1, 11):
... print str (x) .rjust (2), str (x * x) .rjust (3),
... # Δώστε προσοχή στο τελευταίο κόμμα
... print str (x * x * x) .rjust (4)
...
1 1 1
2 4 8
3 9 27
4 16 64
5 25 125
6 36 216
7 49 343
8 64 512
9 81 729
10 100 1000

>>> για x στην περιοχή (1,11):
... εκτύπωση "% 2d% 3d% 4d"% (x, x * x, x * x * x)
...
1 1 1
2 4 8
3 9 27
4 16 64
5 25 125
6 36 216
7 49 343
8 64 512
9 81 729
10 100 1000

(Σημειώστε ότι ένα κενό μεταξύ των στηλών προστέθηκε από τη δήλωση εκτύπωσης.)

Αυτό το παράδειγμα δείχνει τη χρήση της μεθόδου rjust () των συμβολοσειρών, η οποία δικαιολογεί μια συμβολοσειρά προς τα δεξιά σε ένα πεδίο δεδομένου πλάτους, συμπληρώνοντάς την προς τα αριστερά με κενά. Οι μέθοδοι ljust () και center () λειτουργούν με παρόμοιο τρόπο. Δεν βγάζουν τίποτα - απλώς επιστρέφουν μια νέα γραμμή. Εάν η αρχική συμβολοσειρά είναι πολύ μεγάλη, δεν περικόπτεται, αλλά επιστρέφεται αμετάβλητη: είναι συνήθως καλύτερο να χαλάσετε τη διάταξη της στήλης παρά να εκτυπώσετε τη λάθος τιμή. (Εάν θέλετε πραγματικά να το κόψετε, χρησιμοποιήστε τη λειτουργία κοπής: "s.ljust (n)".)

Η συνάρτηση zfill (), που ορίζεται στη μονάδα συμβολοσειράς, μπορεί επίσης να είναι χρήσιμη, η οποία συμπληρώνει μια συμβολοσειρά με έναν αριθμό από τα αριστερά με μηδενικά, χειριζόμενη σωστά τα σύμβολα συν και πλην:

>>> συμβολοσειρά εισαγωγής
>>> string.zfill ("12", 5)
"00012"
>>> string.zfill ("- 3.14", 7)
"-003.14"
>>> string.zfill ("3.14159265359", 5)
"3.14159265359"

Η χρήση του τελεστή % μοιάζει με αυτό:

>>> εισαγωγή μαθηματικών
>>> print "Η τιμή PI είναι περίπου% 5,3f." % \
... μαθηματικά.πι
Η τιμή PI είναι περίπου 3,142.

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

>>> τραπέζι = ("Sjoerd": 4127, "Jack": 4098, "Dcab": 7678)
>>> για όνομα, τηλέφωνο στο table.items ():
... εκτύπωση "% -10s ==>% 10d"% (όνομα, τηλέφωνο)
...
Dcab ==> 7678
Τζακ ==> 4098
Sjoerd ==> 4127

Οι περισσότερες μορφές λειτουργούν ακριβώς με τον ίδιο τρόπο όπως στο C. Ωστόσο, εάν οι τύποι των ορισμάτων δεν ταιριάζουν με τη μορφή, ο διερμηνέας τα μεταφέρει στον απαιτούμενο τύπο (για παράδειγμα, μια έκφραση οποιουδήποτε τύπου μπορεί να μετατραπεί σε συμβολοσειρά χρησιμοποιώντας το str () ενσωματωμένη συνάρτηση) ή, αν δεν είναι δυνατό, ρίχνει την εξαίρεση 2. Μπορείτε να χρησιμοποιήσετε το * για να μεταβιβάσετε το πλάτος του πεδίου ή την ακρίβεια ως ξεχωριστή παράμετρο.

Σημειώστε ότι αν το σωστό όρισμα είναι πλειάδα, αυτό πάνταθεωρείται λίστα επιχειρημάτων:

>>> Def f (x):
... εκτύπωση "Η τιμή '% s' μεταβιβάστηκε στη συνάρτηση"% x
...
>>> f (1)

>>> στ ()

>>> # δεν ερμηνεύεται όπως αναμένεται
... f ((1,))
Η συνάρτηση μεταβιβάστηκε η τιμή "1"
>>> # σφάλμα
... f ((1, 2))
Traceback (πιο πρόσφατη τελευταία κλήση):
Αρχείο " ", γραμμή 2, μέσα
Αρχείο " ", γραμμή 2, στο στ
TypeError: δεν μετατρέπονται όλα τα ορίσματα κατά τη μορφοποίηση συμβολοσειράς

V σε αυτήν την περίπτωσηΘα είναι ασφαλέστερο να χρησιμοποιήσετε μια πλειάδα που αποτελείται από ένα στοιχείο ως σωστό τελεστή:

>>> Def f (x):
... εκτύπωση "Η τιμή μεταβιβάστηκε στη συνάρτηση"% s ""% (x,)
...
>>> # Τώρα όλα είναι σωστά
... f ((1,))
Η συνάρτηση μεταβιβάστηκε η τιμή "(1,)"
>>> f ((1, 2))
Η συνάρτηση μεταβιβάστηκε η τιμή "(1, 2)"
>>> f (1)
Η συνάρτηση μεταβιβάστηκε η τιμή "1"
>>> στ ()
Η συνάρτηση μεταβιβάστηκε η τιμή ""

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

>>> τραπέζι = ("Sjoerd": 4127, "Jack": 4098, "Dcab": 8637678)
>>> εκτύπωση "Jack:% (Jack) d; Sjoerd:% (Sjoerd) d; Dcab:% (Dcab) d"% πίνακας
Jack: 4098; Sjoerd: 4127; Dcab: 8637678

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

  • Μετάφραση

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

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

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

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

$ name = "Reuven"; εκτυπώστε "Hello, $ name \ n";
Και το πρόγραμμα, αναλόγως, θα γράφει "Γεια σου, Reuven".

Οι κυριολεκτικές συμβολοσειρές στην python είναι ανεξάρτητες από τον τύπο των εισαγωγικών και οι μεταβλητές σε αυτές δεν επεκτείνονται ποτέ στις τιμές τους. Για να επιτευχθεί αυτό, ο τελεστής% χρησιμοποιείται παραδοσιακά σε συμβολοσειρές. Σε αυτό το πλαίσιο, ο χειριστής κοιτάζει τη γραμμή στα αριστερά του και μετράει πόσες τιμές πρέπει να αντικατασταθούν από τις τιμές των αντίστοιχων μεταβλητών στα δεξιά του. Το αποτέλεσμα της λειτουργίας είναι μια νέα γραμμή με τις τιμές των μεταβλητών που εισάγονται στη θέση των θέσεων κράτησης θέσης. Για παράδειγμα:

>>> name = "Reuven" >>> "Γεια σου,% s"% name "Γεια σου, Reuven"
Αυτός ο κώδικας python λειτουργεί καλά από μόνος του και εμφανίζει έναν εξατομικευμένο χαιρετισμό. Έτσι, παρά την πολυετή εξάσκησή μου με την python - έμεινα αρκετά ικανοποιημένος με τη χρήση αυτής της σύνταξης. Ναι, δεν είναι πολύ ωραίο και όχι, δεν έχω κρατήσει ποτέ στη μνήμη μου ένα σωρό τροποποιητές printf που επηρεάζουν τη μορφοποίηση. Εννοώ, πάντα χρησιμοποιούσα τον τροποποιητή "s" (έξοδος ως συμβολοσειρά) και μου ήταν αρκετό που ο python έριξε σιωπηρά ορίσματα σε μια συμβολοσειρά.

Αλλά αυτή τη στιγμή είναι γεγονός ότι η σύνταξη % αποσύρεται, ή τουλάχιστον καταργείται. Υπάρχει μια σημείωση στη λίστα αλληλογραφίας python-dev ότι στον κλάδο 2.x θα παραμείνει τουλάχιστον μέχρι το 2022, αλλά δεν λέγεται τίποτα για τον κλάδο 3.x, επομένως η υποστήριξη για αυτήν τη σύνταξη θα καταργηθεί σύντομα και δεν είναι επιθυμητό να το χρησιμοποιήσετε. Αντικαταστάθηκε από τη μέθοδο str.format.

Στα σεμινάρια μου για python ανέφερα πάντα το str.format, αλλά στο συγκεκριμένα παραδείγματατις περισσότερες φορές βασίζονταν όλοι οι ίδιοι. Πρότεινα μάλιστα να χρησιμοποιούν οι μαθητές το% καθώς προσωπικά μου φάνηκε πολύ πιο εύκολο.

Αλλά η επίμονη αίσθηση ότι κάνω κάτι λάθος και, ίσως, ακόμη και παραπλανώ τους μαθητές μου με ώθησε να μελετήσω πιο προσεκτικά το str.format. Κατά τη διάρκεια της έρευνας κατέληξα στα εξής συμπεράσματα: 1) Δεν είναι καθόλου πιο περίπλοκο από το% και ακόμη πιο απλό σε ορισμένες εφαρμογές. 2) Δεν έχω χρησιμοποιήσει ποτέ στο έπακρο τις δυνατότητες str.format και είναι πολύ βολικές, παρά το χρόνο που χρειάζεται για να τις μάθω.

Ας ξεκινήσουμε με το πιο απλό. Ας πούμε "Καλημέρα" σε κάποιον και θα τον απευθυνθούμε με το ονοματεπώνυμό του, υποθέτοντας ότι είναι αποθηκευμένα στις μεταβλητές "πρώτος" και "τελευταίος". Με τον παλιό τρόπο, θα κάναμε αυτό:

>>> first = "Reuven" >>> last = "Lerner" >>> "Καλημέρα,% s% s"% (πρώτο, τελευταίο) "Καλημέρα, Reuven Lerner"
Ακόμη και σε αυτό το παράδειγμα, βρισκόμαστε αντιμέτωποι με ένα από τα % -συντακτικά προβλήματα - τώρα έχουμε δύο μεταβλητές, και για να τις χρησιμοποιήσουμε και τις δύο πρέπει να κάνουμε μια πλειάδα από αυτές. Από την άποψη του python, αυτό είναι λογικό, αλλά μπορώ να σας διαβεβαιώσω ότι πολλοί μαθητές εκπλήσσονται πολύ από αυτό.

Πώς θα ήταν αυτό το παράδειγμα στην περίπτωση του str.format; Αρκετά παρόμοια:

>>> "Καλημέρα, () ()". Μορφή (πρώτη, τελευταία) "Καλημέρα, Reuven Lerner"
Λάβετε υπόψη ότι έχουμε αλλάξει λίγο την αρχή. Τώρα δεν είναι δυαδικός τελεστήςπάνω από τις συμβολοσειρές και η μέθοδος αντικειμένου είναι μια συμβολοσειρά που λαμβάνει έναν αριθμό παραμέτρων. Αυτό είναι λογικό και πιο συνεπές. Για τους ίδιους μαθητές, ο τελεστής % στα παραδείγματά μου έμοιαζε με προσθήκη στην εκτύπωση, όχι με πράξη σε συμβολοσειρές. Η σημείωση ".format" μετά από μια γραμμή καθιστά πιο προφανές ότι πρόκειται για μια μέθοδο που αναφέρεται στη συγκεκριμένη γραμμή.

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

Το σημείο στο οποίο το str.format εμφανίζει το πρώτο του πλεονέκτημα έναντι του% είναι όταν πρέπει να χρησιμοποιήσετε παραμέτρους αντίστροφη σειρά... Στην πραγματικότητα, δεν υπάρχει τρόπος να επιτευχθεί αυτό με% s. Επίσης, δεν είναι δυνατή η επαναχρησιμοποίηση της τιμής μιας μεταβλητής πολλές φορές. Όταν χρησιμοποιούμε str.format, μπορούμε εύκολα να αλλάξουμε τη σειρά αντικατάστασης:

>>> "Καλημέρα, (1) (0)". Μορφή (πρώτη, τελευταία) "Καλημέρα, Lerner Reuven"
Λάβετε υπόψη ότι εάν χρησιμοποιούσα κενές αγκύλες "() ()", τότε η αντικατάσταση θα γινόταν με την ίδια σειρά με την οποία οι παράμετροι μεταβιβάζονται στη μέθοδο. Μπορείτε να σκεφτείτε τις παραμέτρους ως μια ακολουθία που έχει ευρετηριαστεί από την αρχή, και αν θέλω να αλλάξω τη σειρά, απλώς βάζω τους απαραίτητους δείκτες αυτής της ακολουθίας σε σγουρές αγκύλες. Το πρώτο μας παράδειγμα με το str.format μπορεί να γραφτεί ως εξής:

>>> "Καλημέρα, (0) (1)". Μορφή (πρώτη, τελευταία) "Καλημέρα, Reuven Lerner"
Σημειώστε ότι καθορίζοντας ρητά ευρετήρια, δεν μπορούμε πλέον να βασιζόμαστε στην αυτόματη δημιουργία ευρετηρίου.

Φυσικά, μπορείτε επίσης να χρησιμοποιήσετε μια ακολουθία από μια λίστα χρησιμοποιώντας τον τελεστή *:

>>> ονόματα = ("Reuven", "Lerner") >>> "Καλημέρα, () ()". μορφή (* ονόματα) "Καλημέρα, Reuven Lerner"
Μπορείτε επίσης να χρησιμοποιήσετε ορίσματα με όνομα:

>>> "Καλημέρα, (πρώτη) (τελευταία)". Μορφή (πρώτη = "Ρέουβεν", τελευταία = "Λέρνερ") "Καλημέρα, Ρέουβεν Λέρνερ"
Μου αρέσει ιδιαίτερα αυτή η επιλογή. Οι ονομασμένες παράμετροι είναι πιο σαφείς (αν έχουν καλά ονόματα), και η χρήση των (first) και (last) είναι αρκετά ευανάγνωστη - ειδικά σε σύγκριση με το% (first) s, το οποίο είναι απαραίτητο με τον τελεστή%

Οι επώνυμες παράμετροι μπορούν επίσης να επεκταθούν από ένα λεξικό χρησιμοποιώντας τον τελεστή **:

>>> πρόσωπο = ("πρώτο": "Ρέουβεν", "τελευταίο": "Λέρνερ") >>> "Καλημέρα, (πρώτο) (τελευταίο)". μορφή (** άτομο) "Καλημέρα, Ρουβέν Λέρνερ"
Τα περιέγραψα όλα αυτά στους μαθητές μου και εξεπλάγην με το πόσο πιο άνετα ζουν με αυτή τη σύνταξη. Και έγινε πιο ευχάριστο να δουλεύω μόνος μου.

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

>>> άτομο = ("πρώτο": "Ρέουβεν", "τελευταίο": "Λέρνερ") >>> "Καλό (0), (πρώτο) (τελευταίο)". μορφή ("πρωί", ** άτομο) " Καλημέρα, Reuven Lerner"

Προειδοποίησα.

Αυτό που μπορεί να λείπει από το str.format είναι ... um ... μορφοποίηση. Τα κακά νέα είναι ότι το str.format έχει εντελώς διαφορετικούς κανόνες για τον καθορισμό του τρόπου διαμόρφωσης της εξόδου. Τα καλά νέα είναι ότι αυτοί οι κανόνες είναι αρκετά εύκολο να μάθουν και να κατανοήσουν.

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

>>> "Το όνομά σας είναι (όνομα: 10)". Μορφή (όνομα = "Reuven") "Το όνομά σας είναι Reuven"
(Σημειώστε ότι η γραμμή είναι γεμάτη με κενά μετά το όνομα.)

Εάν πρέπει να ορίσετε τη στοίχιση στη δεξιά πλευρά του μπλοκ, χρησιμοποιήστε το σύμβολο> μεταξύ: και ενός αριθμού:

>>> "Το όνομά σας είναι (όνομα:> 10)". Μορφή (όνομα = "Reuven") "Το όνομά σας είναι Reuven"
Και ναι, μπορείτε να δηλώσετε ρητά ότι θέλω αριστερά-δικαιολογημένα χρησιμοποιώντας το σημάδι<
Εάν πρέπει να εμφανίσετε την τιμή στο κέντρο του μπλοκ, τότε αντί για< и >χρησιμοποιείται το σύμβολο ^:

>>> "Το όνομά σας είναι (όνομα: * ^ 10)". Μορφή (όνομα = "Reuven") "Το όνομά σας είναι ** Reuven **"
Το κείμενο είναι λίγο πολύ σαφές, αλλά τι γίνεται με τους αριθμούς; Προσωπικά, ήταν δύσκολο για μένα να φανταστώ πώς θα λειτουργούσε αυτό, αλλά όλα αποδείχθηκαν αρκετά ξεκάθαρα. Για απλή εμφάνιση αριθμών, χρησιμοποιούμε μια σύνταξη παρόμοια με τις συμβολοσειρές:

>>> "Η τιμή είναι $ (αριθμός).". Μορφή (αριθμός = 123) "Η τιμή είναι 123 $."
Αλλά για τους αριθμούς ισχύει μεγάλη ποσότητατροποποιητές παρά για χορδές. Για παράδειγμα, για να εμφανίσετε έναν αριθμό σε δυαδικό, προσθέστε τον τροποποιητή "b", αν είναι δεκαεξαδικός, προσθέστε τον τροποποιητή "x":

>>> "Η τιμή είναι $ (αριθμός: β).". Μορφή (αριθμός = 5) "Η τιμή είναι 101 $." >>> "Η τιμή είναι $ (αριθμός: x).". Μορφή (αριθμός = 123) "Η τιμή είναι 7 δισ. $."
Φυσικά, ο αριθμός μπορεί να γραφτεί με μηδενικά:

>>> "Η κλήση σας είναι σημαντική για εμάς. Είστε κλήση # (αριθμός: 05).". Μορφή (αριθμός = 123) "Η κλήση σας είναι σημαντική για εμάς. Καλείτε τον αριθμό 00123."
Σημειώστε ότι ο εκτελέσιμος κώδικας python δεν μπορεί να χρησιμοποιηθεί μέσα στο () - αντί αυτού, προσφέρεται μια απλή μικρογλώσσα, ξεχωριστή και διαφορετική από την python στο σύνολό της. Υπάρχουν και μικρές εξαιρέσεις. Πρώτον, μπορείτε να λάβετε τις τιμές των χαρακτηριστικών / ιδιοτήτων μέσω μιας κουκκίδας και, δεύτερον, μπορείτε να πάρετε την τιμή ενός αντικειμένου από το ευρετήριό του χρησιμοποιώντας.

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

>>> class Foo (αντικείμενο): def __init __ (self): self.x = 100 >>> f = Foo () >>> "Ο αριθμός σας είναι (βόδι)". μορφή (o = f) "Ο αριθμός σας είναι 100 "n
Πήραμε το χαρακτηριστικό "x" του αντικειμένου "f". Αυτό το αντικείμενο είναι προσβάσιμο με το όνομα "o" μέσα στη συμβολοσειρά. Μπορείτε να πάρετε ένα χαρακτηριστικό, αλλά δεν μπορείτε να το εκτελέσετε:

>>> "Το όνομά σας είναι (name.upper ())". Μορφή (όνομα = "Reuven") Χαρακτηριστικό Σφάλμα: Το αντικείμενο "str" ​​δεν έχει χαρακτηριστικό "upper ()"
Προσπάθησα να εκτελέσω το "name.upper ()", υποθέτοντας ότι θα κληθεί η κατάλληλη μέθοδος, αλλά η python δεν επιτρέπει την εκτέλεση κώδικα σε αυτό το σημείο και αντιμετωπίζει το "upper ()" ως χαρακτηριστικό μαζί με παρενθέσεις. Χωρίς παρενθέσεις, λαμβάνετε απλώς μια παράσταση συμβολοσειράς της συνάρτησης / μεθόδου:

>>> "Το όνομά σας είναι (όνομα.επάνω)". Μορφή (όνομα = "Reuven") "Το όνομά σας είναι "
Χρησιμοποιώντας αγκύλες, μπορείτε να πάρετε ένα στοιχείο ενός επαναληπτικού αντικειμένου (λίστα, συμβολοσειρά) ανά ευρετήριο. Αλλά οι λειτουργίες slice δεν υποστηρίζονται:

>>> "Ο αγαπημένος σας αριθμός είναι (n).". Μορφή (n = αριθμοί) "Ο αγαπημένος σας αριθμός είναι το 3."
Αλλά:

>>> "Οι αγαπημένοι σας αριθμοί είναι (n).". Μορφή (n = αριθμοί) ValueError: Λείπει το "]" στη συμβολοσειρά μορφής
Μπορεί επίσης να χρησιμοποιηθεί για τη λήψη εγγραφών στο λεξικό με το όνομα, αλλά το όνομα εισάγεται χωρίς εισαγωγικά:

>>> άτομο = ("πρώτο": "Ρέουβεν", "τελευταίο": "Λέρνερ") >>> "Το όνομά σου είναι (ρ).". μορφή (ρ = άτομο) "Το όνομά σου είναι Ρέουβεν."
Αν προσπαθήσουμε να χρησιμοποιήσουμε εισαγωγικά, έχουμε μια εξαίρεση ...

>>> "Το όνομά σας είναι (p [" πρώτα "]". Μορφοποίηση (p = άτομο) Σφάλμα κλειδιού: "" πρώτα ""
Δεν εμφανίζονται όλες οι περιπτώσεις χρήσης για το str.format - στην πραγματικότητα, υπάρχει μια προδιαγραφή κανόνων μορφοποίησης για κάθε τύπο. Για παράδειγμα, η επιλογή ακριβείας για αριθμούς κινητής υποδιαστολής δεν είναι διαθέσιμη για συμβολοσειρές.

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

Εάν θέλετε να μελετήσετε αυτό το θέμα με περισσότερες λεπτομέρειες, θα πρέπει να ξεκινήσετε με το PEP 3101, το οποίο περιγράφει το str.format. Μπορώ επίσης να προτείνω την παρουσίαση του Eric Smith με μια αρκετά καλή περίληψη για αυτό το θέμα. Υπάρχει καλά παραδείγματαπώς να μεταβείτε από το use% στο str.format στην τεκμηρίωση της python

Ελπίζω να το απολαύσατε!

Πρόσφατα ανακάλυψα ότι το ιστολόγιο εντοπίζεται περιστασιακά με το ερώτημα "τι σημαίνει% s στον python". Θυμάμαι τον εαυτό μου - όταν άρχισα να μαθαίνω Python, ήθελα γρήγορες και κατανοητές απαντήσεις (λένε, "μην κοροϊδεύεις το κεφάλι σου, δείξε το δάχτυλό σου"). Για όσους είναι ανυπόμονοι, αυτό το άρθρο.

Πίνακας περιεχομένων

Πρώτον, μερικά παραδείγματα

Μορφοποίηση συμβολοσειρών:
>>> όνομα = "Vasya" >>> print "My name is% s"% (όνομα) Το όνομά μου είναι Vasya Υποδεικνύει το μέγεθος των πεδίων (υπάρχουν πέντε κενά πριν από το "Vasya", δηλαδή δέκα χαρακτήρες συνολικά ):> >> print "My name is% 10s. Αυτό" είναι το όνομά μου. "% (όνομα) Το όνομά μου είναι Vasya. Αυτό είναι το όνομά μου. Το ίδιο, αλλά αριστερή στοίχιση: >>> εκτύπωση "My name is% -10s. This" is my name. "% (Name) Το όνομά μου είναι Vasya. Αυτό" είναι το όνομά μου. Πότε μπορεί να είναι χρήσιμο: >>> ποτά = ("Long Island": 3, "Bloody Mary": 2, "Margarita": 4) >>> εκτύπωση "% -15s% -5s"% ("Όνομα", "Ποσότητα") Όνομα Ποσότητα >>> για k, vσε drinks.item (): ... εκτύπωση "% -15s% -3s"% (k, v) ... Bloody Mary 2 Long Island 3 Margarita 4 Εάν πρέπει να εκτυπώσετε το ακέραιο μέρος ενός αριθμού:
>>> num = 12,34 >>> εκτύπωση "% d"% (αριθμός) 12 Μικτή σε:
>>> ηλικία = 25 >>> print "My name is% s. I" m% d. "% (όνομα, ηλικία) Το όνομά μου είναι Vasya. I" m 25.

Τώρα, με λίγα λόγια, πώς λειτουργεί ο τελεστής %

Η έκφραση μορφοποίησης μπορεί χονδρικά να χωριστεί σε τρία μέρη:

Format_definition +% + αντικείμενο (α)

Τα σύμβολα% s,% d,% g και ούτω καθεξής είναι μορφές τύπων δεδομένων. Εάν είστε εξοικειωμένοι με τη γλώσσα C, αυτή είναι η ίδια σύνταξη που χρησιμοποιεί το printf () για την εκτύπωση.

Προδιαγραφές ΔΙΑΦΟΡΕΤΙΚΟΙ ΤΥΠΟΙΤα δεδομένα Python φαίνονται στον παρακάτω πίνακα:

Μορφή Εννοια
"ρε" Ένας ακέραιος δεκαδικός αριθμός.
"Εγώ" Ένας ακέραιος δεκαδικός αριθμός.
"ο" Οκταδικός αριθμός.
"εσύ" Ο απαρχαιωμένος τύπος είναι ο ίδιος με το "d".
"Χ" Δεκαεξαδικός αριθμός (πεζά).
"Χ" Δεκαεξαδικός αριθμός (κεφαλαίο).
"μι" Πραγματικός αριθμός σε εκθετική μορφή (πεζά).
"ΜΙ" Πραγματικός αριθμός σε εκθετική μορφή (κεφαλαίο).
"φά"
"ΦΑ" Πραγματικός αριθμός σε δεκαδική μορφή.
"σολ" Πραγματικός αριθμός. Χρησιμοποιεί τη μορφή "f" ή "e" σε πεζά γράμματα.
"ΣΟΛ" Πραγματικός αριθμός. Χρησιμοποιεί τη μορφή κεφαλαίων "F" ή "E".
"ντο" Ένας χαρακτήρας (ή αριθμός).
"r" repr ().
"μικρό" Μια συμβολοσειρά στην οποία μετατρέπεται οποιοδήποτε αντικείμενο Python χρησιμοποιώντας το str ().
"%" Το όρισμα δεν μετατρέπεται, απλώς εκτυπώνεται ο χαρακτήρας "%".

Η ενσωματωμένη λειτουργία μορφής ().

Λειτουργεί ως εξής: str.format ()

Στη συμβολοσειρά τα "πεδία αντικατάστασης" περικλείονται σε σγουρά άγκιστρα (). Οτιδήποτε δεν περικλείεται σε αγκύλες αντιμετωπίζεται ως κανονικό κείμενο, το οποίο αντιγράφεται αμετάβλητο. Για να περάσουν χαρακτήρες σγουράς αγκύλες στο κείμενο, αντιγράφονται: ((και)).
Τα πεδία αντικατάστασης μορφοποιούνται ως εξής:

Αντικατάσταση_πεδίου :: = "(" [όνομα_πεδίου] ["!" Μετατροπή] [":" προδιαγραφή] ")" όνομα_πεδίου :: = όνομα_αργύρου ("." Όνομα_χαρακτηριστικού | "[" αριθμός_στοιχείου "]") * όνομα_arg :: = [ αναγνωριστικό | ακέραιος] χαρακτηριστικό_όνομα :: = id item_index :: = ακέραιος | ευρετήριο συμβολοσειράς string_index :: =<любой символ кроме "]">+ μετατροπή :: = "r" | "s" # str ή repr spec :: =<описано ниже>που
spec :: = [[stub] alignment] [sign] [#] [width] [,] [. precision] [type] stub :: =<любой символ>ευθυγράμμιση :: = "<" | ">"|" = "|" ^ "sign :: =" + "|" - "|" "width :: = ακέραιος # πλάτος πεδίου ακρίβεια :: = ακέραιος # δεκαδικά ψηφία type :: =" b "|" c " |" d "|" e "|" E "|" f "|" F "|" g "|" G "|" n "|" o "|" s "|" x "|" X " | " %" Γράφτηκε ως εξής: >>> εκτύπωση "" "\ n (0) ... Κάθισε στον τοίχο ... (0) ... Έπεσα στον ύπνο μου." "". Μορφή ("Humpty Dumpty") Ο Humpty Dumpty κάθισε στον τοίχο Ο Humpty Dumpty έπεσε σε ένα όνειρο.

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

Ένα άλλο παράδειγμα μορφοποίησης:

>>> toc = (... ("Πρώτο κεφάλαιο", "3"), ... ("Δεύτερο κεφάλαιο", "150") ...) >>> για γραμμή σε τόνο: ... εκτύπωση ( "(:.
  • Μετάφραση

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

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

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

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

$ name = "Reuven"; εκτυπώστε "Hello, $ name \ n";
Και το πρόγραμμα, αναλόγως, θα γράφει "Γεια σου, Reuven".

Οι κυριολεκτικές συμβολοσειρές στην python είναι ανεξάρτητες από τον τύπο των εισαγωγικών και οι μεταβλητές σε αυτές δεν επεκτείνονται ποτέ στις τιμές τους. Για να επιτευχθεί αυτό, ο τελεστής% χρησιμοποιείται παραδοσιακά σε συμβολοσειρές. Σε αυτό το πλαίσιο, ο χειριστής κοιτάζει τη γραμμή στα αριστερά του και μετράει πόσες τιμές πρέπει να αντικατασταθούν από τις τιμές των αντίστοιχων μεταβλητών στα δεξιά του. Το αποτέλεσμα της λειτουργίας είναι μια νέα γραμμή με τις τιμές των μεταβλητών που εισάγονται στη θέση των θέσεων κράτησης θέσης. Για παράδειγμα:

>>> name = "Reuven" >>> "Γεια σου,% s"% name "Γεια σου, Reuven"
Αυτός ο κώδικας python λειτουργεί καλά από μόνος του και εμφανίζει έναν εξατομικευμένο χαιρετισμό. Έτσι, παρά την πολυετή εξάσκησή μου με την python - έμεινα αρκετά ικανοποιημένος με τη χρήση αυτής της σύνταξης. Ναι, δεν είναι πολύ ωραίο και όχι, δεν έχω κρατήσει ποτέ στη μνήμη μου ένα σωρό τροποποιητές printf που επηρεάζουν τη μορφοποίηση. Εννοώ, πάντα χρησιμοποιούσα τον τροποποιητή "s" (έξοδος ως συμβολοσειρά) και μου ήταν αρκετό που ο python έριξε σιωπηρά ορίσματα σε μια συμβολοσειρά.

Αλλά αυτή τη στιγμή είναι γεγονός ότι η σύνταξη % αποσύρεται, ή τουλάχιστον καταργείται. Υπάρχει μια σημείωση στη λίστα αλληλογραφίας python-dev ότι στον κλάδο 2.x θα παραμείνει τουλάχιστον μέχρι το 2022, αλλά δεν λέγεται τίποτα για τον κλάδο 3.x, επομένως η υποστήριξη για αυτήν τη σύνταξη θα καταργηθεί σύντομα και δεν είναι επιθυμητό να το χρησιμοποιήσετε. Αντικαταστάθηκε από τη μέθοδο str.format.

Στα σεμινάρια μου για python, ανέφερα πάντα το str.format, αλλά σε συγκεκριμένα παραδείγματα, συχνά βασιζόμουν στο%. Πρότεινα μάλιστα να χρησιμοποιούν οι μαθητές το% καθώς προσωπικά μου φάνηκε πολύ πιο εύκολο.

Αλλά η επίμονη αίσθηση ότι κάνω κάτι λάθος και, ίσως, ακόμη και παραπλανώ τους μαθητές μου με ώθησε να μελετήσω πιο προσεκτικά το str.format. Κατά τη διάρκεια της έρευνας κατέληξα στα εξής συμπεράσματα: 1) Δεν είναι καθόλου πιο περίπλοκο από το% και ακόμη πιο απλό σε ορισμένες εφαρμογές. 2) Δεν έχω χρησιμοποιήσει ποτέ στο έπακρο τις δυνατότητες str.format και είναι πολύ βολικές, παρά το χρόνο που χρειάζεται για να τις μάθω.

Ας ξεκινήσουμε με το πιο απλό. Ας πούμε "Καλημέρα" σε κάποιον και θα τον απευθυνθούμε με το ονοματεπώνυμό του, υποθέτοντας ότι είναι αποθηκευμένα στις μεταβλητές "πρώτος" και "τελευταίος". Με τον παλιό τρόπο, θα κάναμε αυτό:

>>> first = "Reuven" >>> last = "Lerner" >>> "Καλημέρα,% s% s"% (πρώτο, τελευταίο) "Καλημέρα, Reuven Lerner"
Ακόμη και σε αυτό το παράδειγμα, βρισκόμαστε αντιμέτωποι με ένα από τα % -συντακτικά προβλήματα - τώρα έχουμε δύο μεταβλητές, και για να τις χρησιμοποιήσουμε και τις δύο πρέπει να κάνουμε μια πλειάδα από αυτές. Από την άποψη του python, αυτό είναι λογικό, αλλά μπορώ να σας διαβεβαιώσω ότι πολλοί μαθητές εκπλήσσονται πολύ από αυτό.

Πώς θα ήταν αυτό το παράδειγμα στην περίπτωση του str.format; Αρκετά παρόμοια:

>>> "Καλημέρα, () ()". Μορφή (πρώτη, τελευταία) "Καλημέρα, Reuven Lerner"
Λάβετε υπόψη ότι έχουμε αλλάξει λίγο την αρχή. Τώρα δεν είναι ένας δυαδικός τελεστής πάνω από συμβολοσειρές, αλλά μια μέθοδος του αντικειμένου συμβολοσειράς που λαμβάνει έναν αριθμό παραμέτρων. Αυτό είναι λογικό και πιο συνεπές. Για τους ίδιους μαθητές, ο τελεστής % στα παραδείγματά μου έμοιαζε με προσθήκη στην εκτύπωση, όχι με πράξη σε συμβολοσειρές. Η σημείωση ".format" μετά από μια γραμμή καθιστά πιο προφανές ότι πρόκειται για μια μέθοδο που αναφέρεται στη συγκεκριμένη γραμμή.

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

Το σημείο στο οποίο το str.format εμφανίζει το πρώτο του πλεονέκτημα έναντι του% είναι όταν πρέπει να χρησιμοποιήσετε τις παραμέτρους με αντίστροφη σειρά. Στην πραγματικότητα, δεν υπάρχει τρόπος να επιτευχθεί αυτό με% s. Επίσης, δεν είναι δυνατή η επαναχρησιμοποίηση της τιμής μιας μεταβλητής πολλές φορές. Όταν χρησιμοποιούμε str.format, μπορούμε εύκολα να αλλάξουμε τη σειρά αντικατάστασης:

>>> "Καλημέρα, (1) (0)". Μορφή (πρώτη, τελευταία) "Καλημέρα, Lerner Reuven"
Λάβετε υπόψη ότι εάν χρησιμοποιούσα κενές αγκύλες "() ()", τότε η αντικατάσταση θα γινόταν με την ίδια σειρά με την οποία οι παράμετροι μεταβιβάζονται στη μέθοδο. Μπορείτε να σκεφτείτε τις παραμέτρους ως μια ακολουθία που έχει ευρετηριαστεί από την αρχή, και αν θέλω να αλλάξω τη σειρά, απλώς βάζω τους απαραίτητους δείκτες αυτής της ακολουθίας σε σγουρές αγκύλες. Το πρώτο μας παράδειγμα με το str.format μπορεί να γραφτεί ως εξής:

>>> "Καλημέρα, (0) (1)". Μορφή (πρώτη, τελευταία) "Καλημέρα, Reuven Lerner"
Σημειώστε ότι καθορίζοντας ρητά ευρετήρια, δεν μπορούμε πλέον να βασιζόμαστε στην αυτόματη δημιουργία ευρετηρίου.

Φυσικά, μπορείτε επίσης να χρησιμοποιήσετε μια ακολουθία από μια λίστα χρησιμοποιώντας τον τελεστή *:

>>> ονόματα = ("Reuven", "Lerner") >>> "Καλημέρα, () ()". μορφή (* ονόματα) "Καλημέρα, Reuven Lerner"
Μπορείτε επίσης να χρησιμοποιήσετε ορίσματα με όνομα:

>>> "Καλημέρα, (πρώτη) (τελευταία)". Μορφή (πρώτη = "Ρέουβεν", τελευταία = "Λέρνερ") "Καλημέρα, Ρέουβεν Λέρνερ"
Μου αρέσει ιδιαίτερα αυτή η επιλογή. Οι ονομασμένες παράμετροι είναι πιο σαφείς (αν έχουν καλά ονόματα) και η χρήση των (first) και (last) είναι αρκετά ευανάγνωστη - ειδικά σε σύγκριση με το% (first) s, που είναι απαραίτητο με τον τελεστή%

Οι επώνυμες παράμετροι μπορούν επίσης να επεκταθούν από ένα λεξικό χρησιμοποιώντας τον τελεστή **:

>>> πρόσωπο = ("πρώτο": "Ρέουβεν", "τελευταίο": "Λέρνερ") >>> "Καλημέρα, (πρώτο) (τελευταίο)". μορφή (** άτομο) "Καλημέρα, Ρουβέν Λέρνερ"
Τα περιέγραψα όλα αυτά στους μαθητές μου και εξεπλάγην με το πόσο πιο άνετα ζουν με αυτή τη σύνταξη. Και έγινε πιο ευχάριστο να δουλεύω μόνος μου.

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

>>> άτομο = ("πρώτο": "Ρέουβεν", "τελευταίο": "Λέρνερ") >>> "Καλό (0), (πρώτο) (τελευταίο)". μορφή ("πρωί", ** άτομο) " Καλημέρα, Reuven Lerner"

Προειδοποίησα.

Αυτό που μπορεί να λείπει από το str.format είναι ... um ... μορφοποίηση. Τα κακά νέα είναι ότι το str.format έχει εντελώς διαφορετικούς κανόνες για τον καθορισμό του τρόπου διαμόρφωσης της εξόδου. Τα καλά νέα είναι ότι αυτοί οι κανόνες είναι αρκετά εύκολο να μάθουν και να κατανοήσουν.

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

>>> "Το όνομά σας είναι (όνομα: 10)". Μορφή (όνομα = "Reuven") "Το όνομά σας είναι Reuven"
(Σημειώστε ότι η γραμμή είναι γεμάτη με κενά μετά το όνομα.)

Εάν πρέπει να ορίσετε τη στοίχιση στη δεξιά πλευρά του μπλοκ, χρησιμοποιήστε το σύμβολο> μεταξύ: και ενός αριθμού:

>>> "Το όνομά σας είναι (όνομα:> 10)". Μορφή (όνομα = "Reuven") "Το όνομά σας είναι Reuven"
Και ναι, μπορείτε να δηλώσετε ρητά ότι θέλω αριστερά-δικαιολογημένα χρησιμοποιώντας το σημάδι<
Εάν πρέπει να εμφανίσετε την τιμή στο κέντρο του μπλοκ, τότε αντί για< и >χρησιμοποιείται το σύμβολο ^:

>>> "Το όνομά σας είναι (όνομα: * ^ 10)". Μορφή (όνομα = "Reuven") "Το όνομά σας είναι ** Reuven **"
Το κείμενο είναι λίγο πολύ σαφές, αλλά τι γίνεται με τους αριθμούς; Προσωπικά, ήταν δύσκολο για μένα να φανταστώ πώς θα λειτουργούσε αυτό, αλλά όλα αποδείχθηκαν αρκετά ξεκάθαρα. Για απλή εμφάνιση αριθμών, χρησιμοποιούμε μια σύνταξη παρόμοια με τις συμβολοσειρές:

>>> "Η τιμή είναι $ (αριθμός).". Μορφή (αριθμός = 123) "Η τιμή είναι 123 $."
Αλλά υπάρχουν περισσότεροι τροποποιητές για αριθμούς παρά για συμβολοσειρές. Για παράδειγμα, για να εμφανίσετε έναν αριθμό σε δυαδικό, προσθέστε τον τροποποιητή "b", αν είναι δεκαεξαδικός, προσθέστε τον τροποποιητή "x":

>>> "Η τιμή είναι $ (αριθμός: β).". Μορφή (αριθμός = 5) "Η τιμή είναι 101 $." >>> "Η τιμή είναι $ (αριθμός: x).". Μορφή (αριθμός = 123) "Η τιμή είναι 7 δισ. $."
Φυσικά, ο αριθμός μπορεί να γραφτεί με μηδενικά:

>>> "Η κλήση σας είναι σημαντική για εμάς. Είστε κλήση # (αριθμός: 05).". Μορφή (αριθμός = 123) "Η κλήση σας είναι σημαντική για εμάς. Καλείτε τον αριθμό 00123."
Σημειώστε ότι ο εκτελέσιμος κώδικας python δεν μπορεί να χρησιμοποιηθεί μέσα στο () - αντί αυτού, προσφέρεται μια απλή μικρογλώσσα, ξεχωριστή και διαφορετική από την python στο σύνολό της. Υπάρχουν και μικρές εξαιρέσεις. Πρώτον, μπορείτε να λάβετε τις τιμές των χαρακτηριστικών / ιδιοτήτων μέσω μιας κουκκίδας και, δεύτερον, μπορείτε να πάρετε την τιμή ενός αντικειμένου από το ευρετήριό του χρησιμοποιώντας.

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

>>> class Foo (αντικείμενο): def __init __ (self): self.x = 100 >>> f = Foo () >>> "Ο αριθμός σας είναι (βόδι)". μορφή (o = f) "Ο αριθμός σας είναι 100 "n
Πήραμε το χαρακτηριστικό "x" του αντικειμένου "f". Αυτό το αντικείμενο είναι προσβάσιμο με το όνομα "o" μέσα στη συμβολοσειρά. Μπορείτε να πάρετε ένα χαρακτηριστικό, αλλά δεν μπορείτε να το εκτελέσετε:

>>> "Το όνομά σας είναι (name.upper ())". Μορφή (όνομα = "Reuven") Χαρακτηριστικό Σφάλμα: Το αντικείμενο "str" ​​δεν έχει χαρακτηριστικό "upper ()"
Προσπάθησα να εκτελέσω το "name.upper ()", υποθέτοντας ότι θα κληθεί η κατάλληλη μέθοδος, αλλά η python δεν επιτρέπει την εκτέλεση κώδικα σε αυτό το σημείο και αντιμετωπίζει το "upper ()" ως χαρακτηριστικό μαζί με παρενθέσεις. Χωρίς παρενθέσεις, λαμβάνετε απλώς μια παράσταση συμβολοσειράς της συνάρτησης / μεθόδου:

>>> "Το όνομά σας είναι (όνομα.επάνω)". Μορφή (όνομα = "Reuven") "Το όνομά σας είναι "
Χρησιμοποιώντας αγκύλες, μπορείτε να πάρετε ένα στοιχείο ενός επαναληπτικού αντικειμένου (λίστα, συμβολοσειρά) ανά ευρετήριο. Αλλά οι λειτουργίες slice δεν υποστηρίζονται:

>>> "Ο αγαπημένος σας αριθμός είναι (n).". Μορφή (n = αριθμοί) "Ο αγαπημένος σας αριθμός είναι το 3."
Αλλά:

>>> "Οι αγαπημένοι σας αριθμοί είναι (n).". Μορφή (n = αριθμοί) ValueError: Λείπει το "]" στη συμβολοσειρά μορφής
Μπορεί επίσης να χρησιμοποιηθεί για τη λήψη εγγραφών στο λεξικό με το όνομα, αλλά το όνομα εισάγεται χωρίς εισαγωγικά:

>>> άτομο = ("πρώτο": "Ρέουβεν", "τελευταίο": "Λέρνερ") >>> "Το όνομά σου είναι (ρ).". μορφή (ρ = άτομο) "Το όνομά σου είναι Ρέουβεν."
Αν προσπαθήσουμε να χρησιμοποιήσουμε εισαγωγικά, έχουμε μια εξαίρεση ...

>>> "Το όνομά σας είναι (p [" πρώτα "]". Μορφοποίηση (p = άτομο) Σφάλμα κλειδιού: "" πρώτα ""
Δεν εμφανίζονται όλες οι περιπτώσεις χρήσης για το str.format - στην πραγματικότητα, υπάρχει μια προδιαγραφή κανόνων μορφοποίησης για κάθε τύπο. Για παράδειγμα, η επιλογή ακριβείας για αριθμούς κινητής υποδιαστολής δεν είναι διαθέσιμη για συμβολοσειρές.

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

Εάν θέλετε να μελετήσετε αυτό το θέμα με περισσότερες λεπτομέρειες, θα πρέπει να ξεκινήσετε με το PEP 3101, το οποίο περιγράφει το str.format. Μπορώ επίσης να προτείνω την παρουσίαση του Eric Smith με μια αρκετά καλή περίληψη για αυτό το θέμα. Υπάρχουν επίσης καλά παραδείγματα για το πώς να μεταβείτε από το use% στο str.format στην τεκμηρίωση της python.

Ελπίζω να το απολαύσατε!

Συνεχίζοντας το θέμα:
Δίκτυα

Γεια σε όλους! Χρησιμοποιείτε Siri; Αν και αυτός είναι ένας υπέροχος φωνητικός βοηθός με τον οποίο μπορείτε πάντα να μιλήσετε, δεν το κάνω τόσο συχνά. Άλλωστε μέχρι τώρα...

Νέα άρθρα
/
Δημοφιλής