Format Python String ()

Kaedah format string () memformat rentetan yang diberikan menjadi output yang lebih baik di Python.

Sintaks format()kaedahnya adalah:

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

Di sini, p0, p1,… adalah argumen kedudukan dan, k0, k1,… adalah argumen kata kunci dengan nilai v0, v1,… masing-masing.

Dan, templat adalah campuran kod format dengan tempat letak untuk argumen.

Format rentetan () Parameter

format()kaedah mengambil sebilangan parameter. Tetapi, terbahagi kepada dua jenis parameter:

  • Parameter kedudukan - senarai parameter yang dapat diakses dengan indeks parameter di dalam pendakap kerinting(index)
  • Parameter kata kunci - senarai parameter jenis kunci = nilai, yang dapat diakses dengan kunci parameter di dalam pendakap keriting(key)

Nilai kembali dari format String ()

The format()Cara mengembalikan rentetan yang diformatkan.

Bagaimana format String () berfungsi?

Yang format()berbunyi jenis hujah diluluskan kepadanya dan format ia mengikut kod format ditakrifkan dalam rentetan.

Untuk hujah kedudukan

Hujah kedudukan

Di sini, Argument 0 adalah rentetan "Adam" dan Argument 1 adalah nombor terapung 230.2346.

Catatan: Senarai hujah bermula dari 0 di Python.

Rentetan "Hello (0), your balance is (1:9.3f)"adalah rentetan templat. Ini mengandungi kod format untuk pemformatan.

Pendakap kerinting hanyalah penempatan tempat untuk meletakkan hujah. Dalam contoh di atas, (0) adalah placeholder untuk "Adam" dan (1: 9.3f) adalah placeholder untuk 230.2346.

Oleh kerana rentetan templat merujuk format()argumen sebagai (0)dan (1), argumen adalah argumen kedudukan. Mereka berdua juga boleh dirujuk tanpa nombor kerana ()dan Python secara dalaman menukarnya menjadi nombor.

Secara dalaman,

  • Oleh kerana "Adam" adalah argumen ke- 0 , ia diletakkan di tempat (0). Oleh kerana (0)tidak mengandungi kod format lain, ia tidak menjalankan operasi lain.
  • Walau bagaimanapun, ia tidak berlaku untuk 1 st hujah 230,2346. Di sini, (1:9.3f)letakkan 230.2346 di tempatnya dan melakukan operasi 9.3f.
  • f menyatakan format berurusan dengan nombor apungan. Sekiranya tidak dinyatakan dengan betul, ia akan menunjukkan kesalahan.
  • Bahagian sebelum "." (9) menentukan lebar minimum / padding yang dapat diambil oleh nomor (230.2346). Dalam kes ini, 230.2346 diperuntukkan minimum 9 tempat termasuk ".".
    Sekiranya tidak ada pilihan penjajaran yang ditentukan, itu sejajar dengan sebelah kanan ruang yang tinggal. (Untuk tali, ia sejajar ke kiri.)
  • Bahagian selepas "." (3) memangkas bahagian perpuluhan (2346) hingga nombor yang diberikan. Dalam kes ini, 2346 dipotong setelah 3 tempat.
    Bilangan yang tinggal (46) dibundarkan sehingga menghasilkan 235.

Untuk hujah kata kunci

Hujah kata kunci

Kami telah menggunakan contoh yang sama dari atas untuk menunjukkan perbezaan antara kata kunci dan argumen kedudukan.

Di sini, bukannya hanya parameter, kami menggunakan nilai kunci untuk parameter. Yaitu, nama = "Adam" dan blc = 230.2346.

Oleh kerana parameter ini dirujuk oleh kunci mereka sebagai (name) dan (blc: 9.3f), mereka dikenali sebagai kata kunci atau argumen bernama.

Secara dalaman,

  • Tempat letak (nama) diganti dengan nilai nama - "Adam". Oleh kerana ia tidak mengandungi kod format lain, "Adam" diletakkan.
  • Untuk argumen blc = 230.2346, placeholder (blc: 9.3f) digantikan dengan nilai 230.2346. Tetapi sebelum menggantinya, seperti contoh sebelumnya, ia melakukan operasi 9.3f padanya.
    Ini menghasilkan 230.235. Bahagian perpuluhan dipotong setelah 3 tempat dan digit yang tinggal dibundarkan. Begitu juga, lebar keseluruhan ditugaskan 9 meninggalkan dua ruang di sebelah kiri.

Pemformatan asas dengan format ()

The format()kaedah membolehkan penggunaan ruang letak mudah untuk memformat.

Contoh 1: Pemformatan asas untuk argumen lalai, kedudukan dan kata kunci

 # 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))

Pengeluaran

Helo Adam, baki anda ialah 230.2346. Helo Adam, baki anda ialah 230.2346. Helo Adam, baki anda ialah 230.2346. Helo Adam, baki anda ialah 230.2346.

Catatan: Sekiranya argumen bercampur, argumen kata kunci harus selalu mengikuti argumen kedudukan.

Pemformatan nombor dengan format ()

Anda boleh memformat nombor menggunakan penentu format yang diberikan di bawah:

Jenis Pemformatan Nombor
Jenis Makna
d Bilangan bulat perpuluhan
c Perwatakan Unicode yang sepadan
b Format perduaan
o Format Oktal
x Format heksadesimal (huruf kecil)
X Format heksadesimal (huruf besar)
n Sama seperti 'd'. Kecuali menggunakan tetapan tempatan semasa untuk pemisah nombor
e Notasi eksponen. (huruf kecil e)
E Notasi eksponensial (huruf besar E)
f Memaparkan nombor titik tetap (Lalai: 6)
F Sama seperti 'f'. Kecuali paparan 'inf' sebagai 'INF' dan 'nan' sebagai 'NAN'
g Format umum. Membundarkan nombor hingga p digit penting. (Ketepatan lalai: 6)
G Sama seperti 'g'. Kecuali beralih ke 'E' jika jumlahnya besar.
% Peratusan. Gandakan dengan 100 dan meletakkan% pada akhir.

Contoh 2: Pemformatan nombor ringkas

 # 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))

Pengeluaran

 Nombornya ialah: 123 Nombornya adalah: 123.456790 bin: 1100, oct: 14, hex: c

Contoh 3: Pemformatan nombor dengan padding untuk int dan apungan

 # 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))

Pengeluaran

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

Di sini,

  • dalam pernyataan pertama, (:5d)mengambil argumen integer dan memberikan lebar minimum 5. Oleh kerana, tidak ada penjajaran yang ditentukan, ia diselaraskan ke kanan.
  • Dalam pernyataan kedua, Anda dapat melihat lebar (2) kurang dari angka (1234), jadi ia tidak mengambil ruang ke kiri tetapi juga tidak memotong angka.
  • Tidak seperti bilangan bulat, apungan mempunyai bahagian integer dan perpuluhan. Lebar mininum yang ditentukan untuk nombor adalah untuk kedua-dua bahagian secara keseluruhan termasuk "." .
  • Dalam pernyataan ketiga, (:8.3f)memotong bahagian perpuluhan menjadi 3 tempat membundarkan 2 digit terakhir. Dan, jumlahnya, sekarang 12.235, lebar 8 secara keseluruhan meninggalkan 2 tempat di sebelah kiri.
  • Sekiranya anda ingin mengisi tempat yang tinggal dengan sifar, meletakkan sifar sebelum penentu format melakukannya. Ia berfungsi baik untuk bilangan bulat dan apungan: (:05d)dan (:08.3f).

Contoh 4: Pemformatan nombor untuk nombor yang ditandatangani

 # 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))

Pengeluaran

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

Pemformatan nombor dengan penjajaran

Pengendali and =digunakan untuk penjajaran ketika diberikan lebar tertentu ke angka.

Pemformatan nombor dengan penjajaran
Jenis Makna
< Rata kiri ke ruang yang tinggal
^ Tengah sejajar dengan ruang yang tinggal
> Sejajar kanan ke ruang yang tinggal
= Memaksa tanda (+) (-) ke kedudukan paling kiri

Contoh 5: Pemformatan nombor dengan penjajaran kiri, kanan dan tengah

 # 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))

Pengeluaran

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

Catatan: Penjajaran kiri diisi dengan angka nol untuk nombor bulat boleh menyebabkan masalah sebagai contoh ke-3 yang mengembalikan 12000, dan bukannya 12.

Pemformatan rentetan dengan format ()

Sebagai nombor, rentetan dapat diformat dengan cara yang serupa dengan 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)

Anda juga boleh menggunakan objek __str__()dan __repr__()fungsi dengan notasi ringkas format().

Seperti __format__(), anda boleh mengganti objek __str__()dan __repr_()kaedah dengan mudah.

Contoh 12: __str () __ dan __repr () __ shorthand! R and! S menggunakan format ()

 # __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()))

Pengeluaran

 Petikan: 'cat', Tanpa Petikan: cat repr: REPR, str: STR 

Artikel menarik...