Format String Python ()

Metode format string () memformat string yang diberikan menjadi keluaran yang lebih bagus dengan Python.

Sintaks dari format()metode ini adalah:

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

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

Dan, template adalah campuran kode format dengan placeholder untuk argumennya.

Parameter format string ()

format()metode mengambil sejumlah parameter. Tapi, dibagi menjadi dua jenis parameter:

  • Parameter posisi - daftar parameter yang dapat diakses dengan indeks parameter di dalam kurung kurawal(index)
  • Parameter kata kunci - daftar parameter bertipe key = value, yang dapat diakses dengan kunci parameter di dalam kurung kurawal(key)

Kembalikan nilai dari format String ()

The format()Metode mengembalikan string diformat.

Bagaimana cara kerja format String ()?

The format()membaca jenis argumen berlalu untuk itu dan format sesuai dengan kode format yang ditetapkan dalam string.

Untuk argumen posisi

Argumen posisi

Di sini, Argumen 0 adalah string "Adam" dan Argumen 1 adalah bilangan mengambang 230.2346.

Catatan: Daftar argumen dimulai dari 0 dengan Python.

String tersebut "Hello (0), your balance is (1:9.3f)"adalah string template. Ini berisi kode format untuk pemformatan.

Tanda kurung kurawal hanyalah placeholder untuk argumen yang akan ditempatkan. Dalam contoh di atas, (0) adalah placeholder untuk "Adam" dan (1: 9.3f) adalah placeholder untuk 230.2346.

Karena template string mereferensikan format()argumen sebagai (0)dan (1), maka argumen tersebut adalah argumen posisi. Keduanya juga dapat direferensikan tanpa angka sebagai ()dan Python secara internal mengubahnya menjadi angka.

Secara internal,

  • Karena "Adam" adalah argumen ke- 0 , ini ditempatkan sebagai pengganti (0). Karena, (0)tidak berisi kode format lain, itu tidak melakukan operasi lain.
  • Namun, tidak demikian halnya untuk 1 st argumen 230,2346. Di sini, (1:9.3f)tempatkan 230.2346 pada tempatnya dan melakukan operasi 9.3f.
  • f menentukan format berurusan dengan nomor float. Jika tidak ditentukan dengan benar, itu akan memberikan kesalahan.
  • Bagian sebelum "." (9) menentukan lebar / bantalan minimum yang dapat diambil nomor (230.2346). Dalam hal ini, 230.2346 diberikan ke minimal 9 tempat termasuk ".".
    Jika tidak ada opsi perataan yang ditentukan, itu diratakan ke kanan dari ruang yang tersisa. (Untuk senar, ini diratakan ke kiri.)
  • Bagian setelah "." (3) memotong bagian desimal (2346) menjadi angka yang ditentukan. Dalam hal ini, 2346 dipotong setelah 3 tempat.
    Angka yang tersisa (46) dibulatkan menjadi keluaran 235.

Untuk argumen kata kunci

Argumen kata kunci

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

Di sini, alih-alih hanya parameter, kami telah menggunakan nilai kunci untuk parameter. Yakni, name = "Adam" dan blc = 230.2346.

Karena parameter ini direferensikan oleh kuncinya sebagai (name) dan (blc: 9.3f), mereka dikenal sebagai kata kunci atau argumen bernama.

Secara internal,

  • Placeholder (nama) diganti dengan nilai nama - "Adam". Karena tidak mengandung kode format lain, "Adam" ditempatkan.
  • Untuk argumen blc = 230.2346, placeholder (blc: 9.3f) diganti dengan nilai 230.2346. Tapi sebelum menggantinya, seperti contoh sebelumnya, ia melakukan operasi 9.3f padanya.
    Ini menghasilkan 230.235. Bagian desimal dipotong setelah 3 tempat dan angka yang tersisa dibulatkan. Demikian juga, lebar total ditetapkan 9 menyisakan dua spasi ke kiri.

Pemformatan dasar dengan format ()

The format()Metode memungkinkan penggunaan placeholder sederhana untuk memformat.

Contoh 1: Pemformatan dasar untuk argumen default, posisi, 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))

Keluaran

Halo Adam, saldo Anda 230.2346. Halo Adam, saldo Anda 230.2346. Halo Adam, saldo Anda 230.2346. Halo Adam, saldo Anda 230.2346.

Catatan: Dalam kasus argumen campuran, argumen kata kunci harus selalu mengikuti argumen posisi.

Pemformatan angka dengan format ()

Anda dapat memformat angka menggunakan penentu format yang diberikan di bawah ini:

Jenis Pemformatan Angka
Tipe Berarti
d Bilangan bulat desimal
c Karakter Unicode yang sesuai
b Format biner
Hai Format oktal
x Format heksadesimal (huruf kecil)
X Format heksadesimal (huruf besar)
n Sama seperti 'd'. Kecuali itu menggunakan pengaturan lokal saat ini untuk pemisah nomor
e Notasi eksponensial. (huruf kecil e)
E Notasi eksponensial (huruf besar E)
f Menampilkan nomor poin tetap (Default: 6)
F Sama seperti 'f'. Kecuali menampilkan 'inf' sebagai 'INF' dan 'nan' sebagai 'NAN'
g Format umum. Membulatkan angka ke p digit signifikan. (Presisi default: 6)
G Sama seperti 'g'. Kecuali beralih ke 'E' jika angkanya besar.
% Persentase. Kalikan dengan 100 dan letakkan% di akhir.

Contoh 2: Pemformatan angka sederhana

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

Keluaran

 Nomornya adalah: 123 Nomornya adalah: 123.456790 bin: 1100, okt: 14, hex: c

Contoh 3: Pemformatan angka dengan padding untuk int dan float

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

Keluaran

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

Sini,

  • dalam pernyataan pertama, (:5d)mengambil argumen integer dan menetapkan lebar minimum 5. Karena, tidak ada perataan yang ditentukan, ia disejajarkan ke kanan.
  • Pada pernyataan kedua, Anda dapat melihat lebar (2) lebih kecil dari angka (1234), jadi tidak mengambil spasi ke kiri tetapi juga tidak memotong angkanya.
  • Tidak seperti bilangan bulat, pelampung memiliki bagian bilangan bulat dan desimal. Dan, lebar mininum yang ditentukan ke angka adalah untuk kedua bagian secara keseluruhan termasuk "." .
  • Pada pernyataan ketiga, (:8.3f)potong bagian desimal menjadi 3 tempat yang membulatkan 2 digit terakhir. Dan, nomornya, sekarang 12.235, mengambil lebar 8 secara keseluruhan meninggalkan 2 tempat ke kiri.
  • Jika Anda ingin mengisi tempat yang tersisa dengan nol, menempatkan nol sebelum penentu format melakukan ini. Ia bekerja baik untuk integer dan float: (:05d)dan (:08.3f).

Contoh 4: Pemformatan angka untuk angka 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))

Keluaran

+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 angka dengan perataan

Operator and =digunakan untuk penyelarasan saat menetapkan lebar tertentu ke nomor.

Pemformatan angka dengan perataan
Tipe Berarti
< Rata kiri ke ruang yang tersisa
^ Rata tengah ke ruang yang tersisa
> Rata kanan ke ruang yang tersisa
= Memaksa tanda (+) (-) ke posisi paling kiri

Contoh 5: Pemformatan angka dengan perataan 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))

Keluaran

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

Catatan: Perataan kiri yang diisi dengan angka nol untuk bilangan bulat dapat menyebabkan masalah seperti contoh ke-3 yang mengembalikan 12000, bukan 12.

Pemformatan string dengan format ()

Sebagai angka, string dapat diformat dengan cara yang mirip 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 dapat menggunakan objek __str__()dan __repr__()fungsionalitas dengan menggunakan notasi singkatan format().

Seperti __format__(), Anda dapat dengan mudah mengganti objek __str__()dan __repr_()metode.

Contoh 12: __str () __ dan __repr () __ singkatan! R dan! 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()))

Keluaran

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

Artikel yang menarik...