Μορφή Python String ()

Η μέθοδος συμβολοσειράς μορφής () διαμορφώνει τη δεδομένη συμβολοσειρά σε μια πιο καλή έξοδο στο Python.

Η σύνταξη της format()μεθόδου είναι:

 template.format (p0, p1,…, k0 = v0, k1 = v1,…)

Εδώ, τα p0, p1,… είναι ορίσματα θέσης και, k0, k1,… είναι ορίσματα λέξεων-κλειδιών με τιμές v0, v1,… αντίστοιχα.

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

Μορφή συμβολοσειράς () Παράμετροι

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

  • Παράμετροι θέσης - λίστα παραμέτρων στις οποίες μπορείτε να έχετε πρόσβαση με δείκτη παραμέτρου μέσα σε σγουρά τιράντες(index)
  • Παράμετροι λέξεων-κλειδιών - λίστα παραμέτρων του τύπου key = value, στις οποίες μπορείτε να έχετε πρόσβαση με το κλειδί της παραμέτρου μέσα σε σγουρά τιράντες(key)

Τιμή επιστροφής από τη μορφή συμβολοσειράς ()

Η format()μέθοδος επιστρέφει τη μορφοποιημένη συμβολοσειρά.

Πώς λειτουργεί η μορφή συμβολοσειράς ();

Ο format()διαβάζει τον τύπο των επιχειρημάτων πέρασαν σε αυτό και μορφοποιεί το σύμφωνα με τους κωδικούς μορφότυπο που ορίζεται στο συμβολοσειρά.

Για επιχειρήματα θέσης

Επιχειρησιακά επιχειρήματα

Εδώ, το Argument 0 είναι μια συμβολοσειρά "Adam" και το Argument 1 είναι ένας κυμαινόμενος αριθμός 230.2346.

Σημείωση: Η λίστα επιχειρημάτων ξεκινά από το 0 στο Python.

Η συμβολοσειρά "Hello (0), your balance is (1:9.3f)"είναι η συμβολοσειρά προτύπου. Αυτό περιέχει τους κωδικούς μορφοποίησης για μορφοποίηση.

Τα σγουρά τιράντες είναι απλά σύμβολα κράτησης θέσης για να τοποθετηθούν τα επιχειρήματα. Στο παραπάνω παράδειγμα, το (0) είναι placeholder για το "Adam" και το (1: 9.3f) είναι το placeholder για το 230.2346.

Δεδομένου ότι η συμβολοσειρά προτύπου αναφέρεται σε format()ορίσματα ως (0)και (1), τα ορίσματα είναι ορίσματα θέσης. Και οι δύο μπορούν επίσης να αναφερθούν χωρίς τους αριθμούς καθώς ()και η Python τους μετατρέπει εσωτερικά σε αριθμούς.

Εσωτερικώς,

  • Δεδομένου ότι το "Adam" είναι το 0ο όρισμα, τοποθετείται στη θέση του (0). Δεδομένου (0)ότι δεν περιέχει άλλους κωδικούς μορφής, δεν εκτελεί άλλες λειτουργίες.
  • Ωστόσο, δεν ισχύει για το πρώτο επιχείρημα 230.2346. Εδώ, (1:9.3f)τοποθετεί το 230.2346 στη θέση του και εκτελεί τη λειτουργία 9.3f.
  • f ορίζει ότι η μορφή ασχολείται με έναν αριθμό float. Εάν δεν προσδιοριστεί σωστά, θα εμφανιστεί ένα σφάλμα.
  • Το μέρος πριν από το "." (9) καθορίζει το ελάχιστο πλάτος / επένδυση που μπορεί να πάρει ο αριθμός (230.2346). Σε αυτήν την περίπτωση, διατίθενται 230.2346 τουλάχιστον 9 θέσεις, συμπεριλαμβανομένου του ".".
    Εάν δεν έχει καθοριστεί επιλογή ευθυγράμμισης, ευθυγραμμίζεται στα δεξιά των υπολειπόμενων κενών. (Για χορδές, είναι ευθυγραμμισμένο προς τα αριστερά.)
  • Το μέρος μετά το "". (3) κόβει το δεκαδικό μέρος (2346) μέχρι τον δεδομένο αριθμό. Σε αυτήν την περίπτωση, το 2346 περικόπτεται μετά από 3 θέσεις.
    Οι υπόλοιποι αριθμοί (46) στρογγυλοποιούνται με έξοδο 235.

Για ορίσματα λέξεων-κλειδιών

Ορίσματα λέξεων-κλειδιών

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

Εδώ, αντί για τις παραμέτρους, χρησιμοποιήσαμε μια τιμή-κλειδί για τις παραμέτρους. Δηλαδή, name = "Adam" και blc = 230.2346.

Δεδομένου ότι αυτές οι παράμετροι αναφέρονται από τα κλειδιά τους ως (όνομα) και (blc: 9.3f), είναι γνωστές ως λέξεις-κλειδιά ή ονομαστικά ορίσματα.

Εσωτερικώς,

  • Το σύμβολο κράτησης θέσης (όνομα) αντικαθίσταται από την τιμή του ονόματος - "Adam". Επειδή δεν περιέχει άλλους κωδικούς μορφής, τοποθετείται το "Adam".
  • Για το όρισμα blc = 230.2346, το σύμβολο κράτησης θέσης (blc: 9.3f) αντικαθίσταται από την τιμή 230.2346. Αλλά πριν από την αντικατάστασή του, όπως και το προηγούμενο παράδειγμα, εκτελεί λειτουργία 9.3f σε αυτό.
    Αυτό εξάγει 230,235. Το δεκαδικό τμήμα περικόπτεται μετά από 3 θέσεις και τα υπόλοιπα ψηφία στρογγυλοποιούνται. Ομοίως, αντιστοιχεί στο συνολικό πλάτος 9 αφήνοντας δύο κενά προς τα αριστερά.

Βασική μορφοποίηση με μορφή ()

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

Παράδειγμα 1: Βασική μορφοποίηση για προεπιλεγμένα, θέση και ορίσματα λέξεων-κλειδιών

 # default arguments print("Hello (), your balance is ().".format("Adam", 230.2346)) # positional arguments print("Hello (0), your balance is (1).".format("Adam", 230.2346)) # keyword arguments print("Hello (name), your balance is (blc).".format(name="Adam", blc=230.2346)) # mixed arguments print("Hello (0), your balance is (blc).".format("Adam", blc=230.2346))

Παραγωγή

Γεια σας Adam, το υπόλοιπό σας είναι 230.2346. Γεια σας Adam, το υπόλοιπό σας είναι 230.2346. Γεια σας Adam, το υπόλοιπό σας είναι 230.2346. Γεια σας Adam, το υπόλοιπό σας είναι 230.2346.

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

Μορφοποίηση αριθμών με μορφή ()

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

Τύποι μορφοποίησης αριθμών
Τύπος Εννοια
ρε Δεκαδικός ακέραιος
ντο Αντίστοιχος χαρακτήρας Unicode
σι Δυαδική μορφή
ο Οκταλική μορφή
Χ Δεκαεξαδική μορφή (πεζά)
Χ Δεκαεξαδική μορφή (κεφαλαία)
ν Ίδιο με το «d». Εκτός από τη χρήση της τρέχουσας τοπικής ρύθμισης για το διαχωριστικό αριθμών
μι Εκθετική σημειογραφία. (πεζά e)
μι Exponential notation (uppercase E)
f Displays fixed point number (Default: 6)
F Same as 'f'. Except displays 'inf' as 'INF' and 'nan' as 'NAN'
g General format. Rounds number to p significant digits. (Default precision: 6)
G Same as 'g'. Except switches to 'E' if the number is large.
% Percentage. Multiples by 100 and puts % at the end.

Example 2: Simple number formatting

 # integer arguments print("The number is:(:d)".format(123)) # float arguments print("The float number is:(:f)".format(123.4567898)) # octal, binary and hexadecimal format print("bin: (0:b), oct: (0:o), hex: (0:x)".format(12))

Output

 The number is: 123 The number is:123.456790 bin: 1100, oct: 14, hex: c

Example 3: Number formatting with padding for int and floats

 # integer numbers with minimum width print("(:5d)".format(12)) # width doesn't work for numbers longer than padding print("(:2d)".format(1234)) # padding for float numbers print("(:8.3f)".format(12.2346)) # integer numbers with minimum width filled with zeros print("(:05d)".format(12)) # padding for float numbers filled with zeros print("(:08.3f)".format(12.2346))

Output

 1 2 1 2 3 4 1 2 . 2 3 5 0 0 0 1 2 0 0 1 2 . 2 3 5 

Here,

  • in the first statement, (:5d) takes an integer argument and assigns a minimum width of 5. Since, no alignment is specified, it is aligned to the right.
  • In the second statement, you can see the width (2) is less than the number (1234), so it doesn't take any space to the left but also doesn't truncate the number.
  • Unlike integers, floats has both integer and decimal parts. And, the mininum width defined to the number is for both parts as a whole including ".".
  • In the third statement, (:8.3f) truncates the decimal part into 3 places rounding off the last 2 digits. And, the number, now 12.235, takes a width of 8 as a whole leaving 2 places to the left.
  • If you want to fill the remaining places with zero, placing a zero before the format specifier does this. It works both for integers and floats: (:05d) and (:08.3f).

Example 4: Number formatting for signed numbers

 # show the + sign print("(:+f) (:+f)".format(12.23, -12.23)) # show the - sign only print("(:-f) (:-f)".format(12.23, -12.23)) # show space for + sign print("(: f) (: f)".format(12.23, -12.23))

Output

+12.230000 -12.230000 12.230000 -12.230000 1 2. 2 3 0 0 0 0 - 1 2. 2 3 0 0 0 0

Μορφοποίηση αριθμών με ευθυγράμμιση

Οι τελεστές and =χρησιμοποιούνται για ευθυγράμμιση όταν εκχωρείται ένα ορισμένο πλάτος στους αριθμούς.

Μορφοποίηση αριθμών με ευθυγράμμιση
Τύπος Εννοια
< Αριστερή στοίχιση με τον υπόλοιπο χώρο
^ Στοίχιση στο κέντρο με τον υπόλοιπο χώρο
> Δεξιά στοίχιση με τον υπόλοιπο χώρο
= Αναγκάζει το υπογεγραμμένο (+) (-) στην αριστερή θέση

Παράδειγμα 5: Μορφοποίηση αριθμών με αριστερή, δεξιά και κεντρική στοίχιση

 # integer numbers with right alignment print("(:5d)".format(12)) # float numbers with center alignment print("(:^10.3f)".format(12.2346)) # integer left alignment filled with zeros print("(:<05d)".format(12)) # float numbers with center alignment print("(:=8.3f)".format(-12.2346))

Παραγωγή

1 2 1 2. 2 3 5 1 2 0 0 0 - 1 2. 2 3 5

Σημείωση: Η αριστερή ευθυγράμμιση γεμάτη με μηδενικά για ακέραιους αριθμούς μπορεί να προκαλέσει προβλήματα ως το 3ο παράδειγμα που επιστρέφει 12000 αντί για 12

Διαμόρφωση συμβολοσειράς με μορφή ()

Ως αριθμοί, η συμβολοσειρά μπορεί να μορφοποιηθεί με παρόμοιο τρόπο με format().

Example 6: String formatting with padding and alignment

 # string padding with left alignment print("(:5)".format("cat")) # string padding with right alignment print("(:>5)".format("cat")) # string padding with center alignment print("(:^5)".format("cat")) # string padding with center alignment # and '*' padding character print("(:*^5)".format("cat"))

Output

 c a t c a t c a t * c a t * 

Example 7: Truncating strings with format()

 # truncating strings to 3 letters print("(:.3)".format("caterpillar")) # truncating strings to 3 letters # and padding print("(:5.3)".format("caterpillar")) # truncating strings to 3 letters, # padding and center alignment print("(:^5.3)".format("caterpillar"))

Output

 c a t c a t c a t 

Formatting class and dictionary members using format()

Python internally uses getattr() for class members in the form ".age". And, it uses __getitem__() lookup for dictionary members in the form "(index)".

Example 8: Formatting class members using format()

 # define Person class class Person: age = 23 name = "Adam" # format age print("(p.name)'s age is: (p.age)".format(p=Person()))

Output

 Adam's age is: 23 

Here, Person object is passed as a keyword argument p.

Inside the template string, Person's name and age are accessed using .name and .age respectively.

Example 9: Formatting dictionary members using format()

 # define Person dictionary person = ('age': 23, 'name': 'Adam') # format age print("(p(name))'s age is: (p(age))".format(p=person))

Output

 Adam's age is: 23 

Similar to class, person dictionary is passed as a keyword argument p.

Inside the template string, person's name and age are accessed using (name) and (age) respectively.

There's an easier way to format dictionaries in Python using str.format(**mapping).

 # define Person dictionary person = ('age': 23, 'name': 'Adam') # format age print("(name)'s age is: (age)".format(**person))

** is a format parameter (minimum field width).

Arguments as format codes using format()

You can also pass format codes like precision, alignment, fill character as positional or keyword arguments dynamically.

Example 10: Dynamic formatting using format()

 # dynamic string format template string = "(:(fill)(align)(width))" # passing format codes as arguments print(string.format('cat', fill='*', # dynamic float format template num = "(:(align)(width).(precision)f)" # passing format codes as arguments print(num.format(123.236,>

Output

 * * c a t * * 1 2 3 . 2 4 

Here,

  • In the first example, 'cat' is the positional argument is to be formatted. Likewise, fill='*', align='^' and width=5 are keyword arguments.
  • In the template string, these keyword arguments are not retrieved as normal strings to be printed but as the actual format codes fill, align and width.
    The arguments replaces the corresponding named placeholders and the string 'cat' is formatted accordingly.
  • Likewise, in the second example, 123.236 is the positional argument and, align, width and precision are passed to the template string as format codes.

Extra formatting options with format()

format() also supports type-specific formatting options like datetime's and complex number formatting.

format() internally calls __format__() for datetime, while format() accesses the attributes of the complex number.

You can easily override the __format__() method of any object for custom formatting.

Example 11: Type-specific formatting with format() and overriding __format__() method

 import datetime # datetime formatting date = datetime.datetime.now() print("It's now: (:%Y/%m/%d %H:%M:%S)".format(date)) # complex number formatting complexNumber = 1+2j print("Real part: (0.real) and Imaginary part: (0.imag)".format(complexNumber)) # custom __format__() method class Person: def __format__(self, format): if(format == 'age'): return '23' return 'None' print("Adam's age is: (:age)".format(Person()))

Output

 It's now: 2016/12/02 04:16:28 Real part: 1.0 and Imaginary part: 2.0 Adam's age is: 23 

Here,

  • For datetime:
    Current datetime is passed as a positional argument to the format() method.
    And, internally using __format__() method, format() accesses the year, month, day, hour, minutes and seconds.
  • For complex numbers:
    1+2j is internally converted to a ComplexNumber object.
    Then accessing its attributes real and imag, the number is formatted.
  • Overriding __format__():
    Like datetime, you can override your own __format__() method for custom formatting which returns age when accessed as (:age)

Μπορείτε επίσης να χρησιμοποιήσετε αντικείμενα __str__()και __repr__()λειτουργίες με συντομογραφίες format().

Όπως __format__(), μπορείτε εύκολα να παρακάμψετε αντικείμενα __str__()και __repr_()μεθόδους.

Παράδειγμα 12: __str () __ και __repr () __ shorthand! R and! S χρησιμοποιώντας τη μορφή ()

 # __str__() and __repr__() shorthand !r and !s print("Quotes: (0!r), Without Quotes: (0!s)".format("cat")) # __str__() and __repr__() implementation for class class Person: def __str__(self): return "STR" def __repr__(self): return "REPR" print("repr: (p!r), str: (p!s)".format(p=Person()))

Παραγωγή

 Αποσπάσματα: «cat», Χωρίς εισαγωγικά: cat repr: REPR, str: STR 

ενδιαφέροντα άρθρα...