Kanggo ngowahi (format) nomer utawa senar menyang macem-macem format ing Python, nggunakake dibangun ing format fungsi () utawa cara senar str.format ().
Ing bagean iki, kita bakal nerangake carane nggunakake fungsi ing ngisor iki.
- fungsi built-in (contone ing basa pemrograman)
format()
- metode string
str.format()
Kajaba iku, string spesifikasi format kanggo ngowahi menyang format ing ngisor iki diterangake kanthi kode sampel.
- Kiri-justified, Center-justified, tengen-justified
- nul isi
- Tandha (plus utawa minus)
- Pemisah digit (koma, garis ngisor)
- Angka biner, oktal, lan heksadesimal
- Nemtokake nomer digit sawise titik desimal
- Angka penting (jumlah angka penting)
- notasi eksponensial
- Tampilan persentasi
Elinga yen wiwit Python 3.6, f-strings (f-strings) wis ditambahake kanggo cara senar str.format () kanggo nggawe luwih ringkes.
- Fungsi internal: format()
- String metode str.format()
- Kiri-justified, Center-justified, tengen-justified
- 0 ngisi
- Tandha (plus utawa minus)
- Pemisah digit (koma, garis ngisor)
- Angka biner, oktal, lan heksadesimal
- Nemtokake nomer digit sawise titik desimal
- notasi eksponensial
- Angka penting (jumlah angka penting)
- Tampilan persentasi
Fungsi internal: format()
format () kasedhiya minangka Python standar dibangun ing fungsi.
Garise kaya ing ngisor iki.
format(value, format_spec)
- Argumentasi pisanan: ing
value
Nilai asline. String str, angka int, float, etc. - Argumentasi kapindho
format_spec
Format string spesifikasi. String str - Nilai bali: string format str
- Argumentasi pisanan: ing
Conto kapacak ing ngisor iki. Jinis format strings lan carane nulis mau bakal diterangake mengko.
Ing conto iki, kita wis nggunakake literal numerik lan literal string minangka argumen pisanan, nanging mesthi sampeyan bisa nggunakake variabel sing ngemot nilai kasebut.
s = format(255, '04x')
print(s)
print(type(s))
# 00ff
# <class 'str'>
print(format('center', '*^16'))
# *****center*****
String metode str.format()
Ana uga cara format () kanggo jinis string str.
{} ing string str sing nelpon format () cara disebut lapangan substitusi, lan diganti dening argumen saka format () cara.
String spesifikasi format kudu ditulis ing kolom substitusi {} diikuti “:”.
Nilai bali minangka format string str.
Proses padha karo dibangun ing format fungsi () diterangake ing ndhuwur minangka nderek.
s = '{:04x}'.format(255)
print(s)
print(type(s))
# 00ff
# <class 'str'>
print('{:*^16}'.format('center'))
# *****center*****
Maneh, kita nggunakake literal numerik lan literal string minangka argumen, nanging mesthi variabel uga bisa ditampa.
Nemtokake argumen kanggo kolom substitusi
Nemtokake argumen kanthi urutan (standar)
Bisa uga ana sawetara kolom substitusi {}, lan minangka standar, argumen metode diproses kanthi urut. Yen string spesifikasi format ing {} diilangi, iku mung bakal diowahi dadi string dening str ().
Migunani kanggo nglebokake nilai variabel ing senar lan nyithak.
print('{}-{}-{}'.format('100', '二百', 300))
# 100-二百-300
Nemtokake argumen posisi kanggo nilai integer
Yen nilai integer ditemtokake ing {}, kayata {0} utawa {1}, output bakal gumantung saka urutan argumen. Nomer sing padha bisa digunakake bola-bali. Iki migunani yen sampeyan pengin nglebokake nilai sing padha ing senar.
print('{0}-{1}-{0}'.format('foo', 'bar'))
# foo-bar-foo
Nemtokake argumen tembung kunci kanggo jeneng sewenang-wenang (string)
Sampeyan uga bisa nemtokake jeneng apa wae ing {} lan ngetik minangka argumen tembung kunci.
print('{day}/{month}/{year}/'.format(day=11, month=1, year=2018))
# 11/1/2018
Nemtokake dhaptar utawa kamus minangka argumen
Dhaptar lan kamus bisa ditemtokake minangka argumen.
Gunakake [] kanggo nemtokake indeks dhaptar utawa kunci kamus ing kolom substitusi. Elinga yen tandha petik “‘” lan “” ora digunakake kanggo nemtokake kunci kamus.
Yen sampeyan pengin nggunakake argumen sing padha bola-bali, sampeyan kudu nemtokake nilai integer utawa senar (jeneng) kaya sing kasebut ing ndhuwur.
l = ['one', 'two', 'three']
print('{0[0]}-{0[1]}-{0[2]}'.format(l))
# one-two-three
d1 = {'name': 'Alice', 'age': 20}
d2 = {'name': 'Bob', 'age': 30}
print('{0[name]} is {0[age]} years old.\n{1[name]} is {1[age]} years old.'.format(d1, d2))
# Alice is 20 years old.
# Bob is 30 years old.
Bisa ditambahi minangka argumen posisi kanthi nambah * menyang dhaptar lan nemtokake minangka argumen, utawa minangka argumen tembung kunci kanthi nambah ** menyang kamus lan nemtokake minangka argumen.
l = ['one', 'two', 'three']
print('{}-{}-{}'.format(*l))
# one-two-three
d = {'name': 'Alice', 'age': 20}
print('{name} is {age} years old.'.format(**d))
# Alice is 20 years old.
Deskripsi kurung kriting {}
Yen sampeyan pengin nulis kurung kriting {,} ing cara format (), baleni kaping pindho kaya {{,}}. Elinga yen backslash ora bisa uwal.
print('{{}}-{num}-{{{num}}}'.format(num=100))
# {}-100-{100}
string sing diformat
Ing kasus loro, kanggo nemtokake format, tulis “: format string” sawise nilai integer utawa jeneng string ing {}.
print('{num:x}'.format(num=255))
# ff
print('{day}/{month:02}/{year:02}/'.format(day=11, month=1, year=2018))
# 11/01/2018
Ing ngisor iki, kita bakal nerangake carane nemtokake format nggunakake string format. Kode sampel nggunakake cara senar str.format (), nanging senar format padha bisa digunakake karo dibangun ing format fungsi (). Ing format fungsi dibangun ing (), string specification format kasebut minangka argumen kapindho.
Kiri-justified, Center-justified, tengen-justified
Sampeyan bisa nyelarasake sisih kiwa-justified, tengah-justified, tengen-justified, etc. ing ngisor iki. Nemtokake jumlah total karakter minangka nomer.
<
^
>
print('left : {:<10}'.format(100))
print('center: {:^10}'.format(100))
print('right : {:>10}'.format(100))
# left : 100
# center: 100
# right : 100
Sampeyan uga bisa nemtokake karakter sing bakal diisi. Yen diilangi, kaya ing conto ing ndhuwur, iku spasi.
Sampeyan bisa nggunakake karakter pindho bait anggere iku karakter siji.
print('left : {:*<10}'.format(100))
print('center: {:a^10}'.format(100))
print('right : {:鬼>10}'.format(100))
# left : 100*******
# center: aaa100aaaa
# right : 鬼鬼鬼鬼鬼鬼鬼100
Kabeneran tengen karo & gt; ora nggatekake tandha (-+). Yen sampeyan nggunakake =, tandha ngiring dening karakter kasebut. Yen sampeyan pengin nemtokake +, tulis + sawise =. Rincian pangolahan tandha diterangake mengko.
print('sign: {:0>10}'.format(-100))
print('sign: {:0=10}'.format(-100))
print('sign: {:0=+10}'.format(100))
# sign: 000000-100
# sign: -000000100
# sign: +000000100
<, ^, lan > bisa ditemtokake kanggo strings, nanging = bakal nyebabake kesalahan ValueError. Yen sampeyan pengin nggunakake = kanggo senar, sampeyan kudu ngowahi menyang nomer nggunakake int ().
# print('sign: {:0=10}'.format('-100'))
# ValueError: '=' alignment not allowed in string format specifier
print('sign: {:0=10}'.format(int('-100')))
# sign: -000000100
Padha ditrapake kanggo nomer floating-titik. Titik desimal uga dianggep minangka karakter.
print('left : {:*<10}'.format(1.23))
print('center: {:a^10}'.format(1.23))
print('right : {:鬼>10}'.format(1.23))
# left : 1.23******
# center: aaa1.23aaa
# right : 鬼鬼鬼鬼鬼鬼1.23
print('sign: {:0>10}'.format(-1.23))
print('sign: {:0=10}'.format(-1.23))
print('sign: {:0=+10}'.format(1.23))
# sign: 00000-1.23
# sign: -000001.23
# sign: +000001.23
Dhaptar, tuples, etc.. bakal nimbulaké kesalahan yen kasebut minangka-iki, lan bisa diowahi kanggo strings nggunakake str ().
l = [0, 1]
print(type(l))
# <class 'list'>
# print('{:*^16}'.format(l))
# TypeError: unsupported format string passed to list.__format__
print(type(str(l)))
# <class 'str'>
print('{:*^16}'.format(str(l)))
# *****[0, 1]*****
Kanggo kiwa-justified, tengah-justified, lan tengen-justified, ana uga cara senar darmabakti disebut ljust (), tengah (), lan rjust ().
0 ngisi
Yen sampeyan pengin nyetel jumlah digit kanthi nul-Isi, nyetel karakter kanggo kapenuhan 0 lan tengen-mbenerake.
Ing kasus zero-filling, yen simbol keselarasan diilangi, diproses kaya-kaya = wis ditemtokake.
print('zero padding: {:0=10}'.format(100))
print('zero padding: {:010}'.format(100))
# zero padding: 0000000100
# zero padding: 0000000100
print('zero padding: {:0=10}'.format(-100))
print('zero padding: {:010}'.format(-100))
# zero padding: -000000100
# zero padding: -000000100
#KESALAHAN!
# print('zero padding: {:010}'.format('-100'))
# ValueError: '=' alignment not allowed in string format specifier
Kanggo nul-Isi, ana uga cara senar khusus disebut zfill ().
Tandha (plus utawa minus)
Kanthi gawan, mung nomer negatif ditandhani karo tandha (minus-).
Nalika + ditambahake menyang string spesifikasi format, tandha (plus +) uga ditampilake kanggo nomer positif. Yen spasi ditambahake, spasi ditampilake ing wiwitan nomer positif, lan nomer digit didadekake siji karo nomer negatif.
print('sign: {}'.format(100))
print('sign: {}'.format(-100))
# sign: 100
# sign: -100
print('sign: {:+}'.format(100))
print('sign: {:+}'.format(-100))
# sign: +100
# sign: -100
print('sign: {: }'.format(100))
print('sign: {: }'.format(-100))
# sign: 100
# sign: -100
Ati-ati nalika ngisi karakter sembarang, kayata nol-isi kasebut ing ndhuwur. Standar, tanpa + lan ora ana spasi, ngisi angka positif kanthi karakter liyane.
print('sign: {:06}'.format(100))
print('sign: {:06}'.format(-100))
# sign: 000100
# sign: -00100
print('sign: {:+06}'.format(100))
print('sign: {:+06}'.format(-100))
# sign: +00100
# sign: -00100
print('sign: {: 06}'.format(100))
print('sign: {: 06}'.format(-100))
# sign: 00100
# sign: -00100
Yen simbol keselarasan digunakake, simbol sebutan tandha kudu ditulis sawise simbol keselarasan.
print('sign: {:_>6}'.format(100))
print('sign: {:_>6}'.format(-100))
# sign: ___100
# sign: __-100
print('sign: {:_>+6}'.format(100))
print('sign: {:_>+6}'.format(-100))
# sign: __+100
# sign: __-100
print('sign: {:_> 6}'.format(100))
print('sign: {:_> 6}'.format(-100))
# sign: __ 100
# sign: __-100
Pemisah digit (koma, garis ngisor)
Tambah koma utawa garis ngisor _ separator saben telung digit. Iki nggawe nomer akeh luwih gampang diwaca. Elinga yen underscore_ minangka pilihan sing ditambahake ing Python 3.6, saengga ora bisa digunakake ing versi sadurunge.
print('{:,}'.format(100000000))
# 100,000,000
print('{:_}'.format(100000000))
# 100_000_000
Ing kasus jinis floating-point number float, mung bagean integer sing diwatesi.
print('{:,}'.format(1234.56789))
# 1,234.56789
Angka biner, oktal, lan heksadesimal
Ngonversi nilai numerik menyang angka biner, octal, lan heksadesimal kanggo output.
b
: Binaro
: Oktald
: Desimalx
,X
: Heksadesimal (huruf gedhe dikapitalisasi)
print('bin: {:b}'.format(255))
print('oct: {:o}'.format(255))
print('dec: {:d}'.format(255))
print('hex: {:x}'.format(255))
print('HEX: {:X}'.format(255))
# bin: 11111111
# oct: 377
# dec: 255
# hex: ff
# HEX: FF
Bisa uga digabung karo 0-fill, lan asring digunakake kanggo nyelarasake digit ing notasi biner lan heksadesimal.
print('bin: {:08b}'.format(255))
print('oct: {:08o}'.format(255))
print('dec: {:08d}'.format(255))
print('hex: {:08x}'.format(255))
print('HEX: {:08X}'.format(255))
# bin: 11111111
# oct: 00000377
# dec: 00000255
# hex: 000000ff
# HEX: 000000FF
Elinga yen nomer karakter isi-nol kudu ditemtokake kanthi prefiks.
print('bin: {:#010b}'.format(255))
print('oct: {:#010o}'.format(255))
print('dec: {:#010d}'.format(255))
print('hex: {:#010x}'.format(255))
print('HEX: {:#010X}'.format(255))
# bin: 0b11111111
# oct: 0o00000377
# dec: 0000000255
# hex: 0x000000ff
# HEX: 0X000000FF
Kanggo nomer binar lan heksadesimal, mung bisa dilebokake pemisah _ digit garis ngisor (Python 3.6 utawa luwih anyar). 4-digit separator digunakake; nomer karakter nul-nepsu uga kudu njupuk menyang akun nomer underscores.
print('hex: {:08x}'.format(255))
print('hex: {:09_x}'.format(255))
print('hex: {:#011_x}'.format(255))
# hex: 000000ff
# hex: 0000_00ff
# hex: 0x0000_00ff
Mung jinis integer int sing bisa ngowahi format kasebut dadi binar utawa heksadesimal. Sampeyan bisa nggunakake int () Ngonversi menyang nomer.
# print('hex: {:08x}'.format('255'))
# ValueError: Unknown format code 'X' for object of type 'str'
print('hex: {:08x}'.format(int('255')))
# hex: 000000ff
Nemtokake nomer digit sawise titik desimal
Kanggo nemtokake jumlah digit sawise titik desimal, tindakake ing ngisor iki: n minangka nomer digit. Jumlah digit sawise titik desimal dadi nomer tartamtu saka digit preduli saka nomer digit ing bagean integer..[n]f
print('{:.2f}'.format(123.456))
print('{:.5f}'.format(123.456))
print('{:.3f}'.format(0.0001234))
# 123.46
# 123.45600
# 0.000
Sisih kiwa titik desimal bisa ditemtokake minangka dibenerake kiwa, dibenerake tengah, dibenerake tengen, utawa diisi nol kaya sing kasebut ing ndhuwur. Yen jumlah digit nilai target luwih saka nomer sing ditemtokake, ora ana sing ditindakake. Yen jumlah digit ing nilai target luwih gedhe tinimbang jumlah digit sing ditemtokake, ora ana sing ditindakake.
print('{:>12.5f}'.format(123.456))
print('{:012.5f}'.format(123.456))
print('{:06.5f}'.format(123.456))
# 123.45600
# 000123.45600
# 123.45600
Yen sampeyan nemtokake jumlah digit kurang saka nomer asli digit sawise titik desimal, Nilai bakal dibunderaké. Elinga yen iki ora dibunderaké kanggo kabèh nomer paling cedhak, nanging kanggo nomer genap, f.eks. 0.5 dibunderaké dadi 0.
print('{:.0f}'.format(0.4))
print('{:.0f}'.format(0.5))
print('{:.0f}'.format(0.6))
# 0
# 0
# 1
Yen sampeyan pengin nggunakake rounding umum, sampeyan bisa nggunakake cara quantize () saka desimal perpustakaan standar.
notasi eksponensial
Nalika nomer floating-point float diowahi dadi string str, bakal kanthi otomatis ditulis ing notasi eksponensial gumantung ing nomer digit. Integer jinis int ora.
print('{}'.format(0.0001234))
print('{}'.format(0.00001234))
# 0.0001234
# 1.234e-05
print('{}'.format(1234000000000000.0))
print('{}'.format(12340000000000000.0))
print('{}'.format(12340000000000000000000000))
# 1234000000000000.0
# 1.234e+16
# 12340000000000000000000000
Yen sampeyan nemtokake e utawa E ing string spesifikasi format, sampeyan bisa tansah ngowahi menyang notasi eksponensial. Karakter sing digunakake ing output bakal dadi e lan E.
print('{:e}'.format(0.0001234))
print('{:E}'.format(0.0001234))
# 1.234000e-04
# 1.234000E-04
Sampeyan uga bisa nemtokake nomer digit sawise titik desimal. Bagean integer bakal dadi siji digit lan titik desimal bakal dadi nomer digit sing ditemtokake.
print('{:.5e}'.format(0.0001234))
print('{:.2E}'.format(0.0001234))
# 1.23400e-04
# 1.23E-04
print('{:.5e}'.format(987.65))
print('{:.2E}'.format(987.65))
# 9.87650e+02
# 9.88E+02
Elinga yen sampeyan nemtokake kiwa-justified, center-justified, tengen-justified, utawa zero-filled, e-, E+, etc. uga bakal diitung minangka digit (karakter).
print('{:>12.5e}'.format(987.65))
print('{:012.2E}'.format(987.65))
# 9.87650e+02
# 00009.88E+02
Angka penting (jumlah angka penting)
Sampeyan bisa nemtokake nomer sakabèhé digit kanthi nindakake ing ngisor iki Gumantung saka asil, notasi eksponensial bakal digunakake kanthi otomatis. Elinga yen nol mburi sawise titik desimal bakal diilangi..[n]g
print('{:.2g}'.format(123.456))
print('{:.3g}'.format(123.456))
print('{:.8g}'.format(123.456))
print('{:.3g}'.format(0.0001234))
# 1.2e+02
# 123
# 123.456
# 0.000123
Yen sampeyan ngilangi g, output ora bakal dadi integer. g padha ing paling kasus, nanging mung ing kasus endi output integer.
print('{:.2}'.format(123.456))
print('{:.3}'.format(123.456))
print('{:.8}'.format(123.456))
print('{:.3}'.format(0.0001234))
# 1.2e+02
# 1.23e+02
# 123.456
# 0.000123
Yen kita ngolah nilai sing padha, kita entuk ing ngisor iki.
print('{:.3f}'.format(123.456))
print('{:.3e}'.format(123.456))
print('{:.3g}'.format(123.456))
print('{:.3}'.format(123.456))
# 123.456
# 1.235e+02
# 123
# 1.23e+02
print('{:.8f}'.format(123.456))
print('{:.8e}'.format(123.456))
print('{:.8g}'.format(123.456))
print('{:.8}'.format(123.456))
# 123.45600000
# 1.23456000e+02
# 123.456
# 123.456
Ing kasus g utawa yen diilangi, nul mburine sawise titik desimal diilangi, dadi yen sampeyan pengin ngasilake angka penting sing padha (jumlah digit penting), gunakake notasi eksponensial e utawa E. part integer tansah siji digit lan titik desimal punika nomer tartamtu saka digit, supaya yen sampeyan pengin output n digit wujud, mung nemtokake n-1.
print('{:.4e}'.format(123.456))
print('{:.4e}'.format(0.000012345))
print('{:.4e}'.format(12))
# 1.2346e+02
# 1.2345e-05
# 1.2000e+01
Tampilan persentasi
Yen % ditemtokake ing string spesifikasi format, nilai float numerik utawa int dikalikan karo 100 lan diowahi dadi string kanthi %.
Sampeyan uga bisa nemtokake nomer digit sawise titik desimal. Default yaiku enem digit sawise titik desimal. Ngiwa-mbenerake, tengah-mbenerake, tengen-mbenerake, lan nul-isi uga kasedhiya. % uga dianggep minangka karakter.
print('{:%}'.format(0.12345))
print('{:.2%}'.format(0.12345))
# 12.345000%
# 12.35%
print('{:%}'.format(10))
print('{:.2%}'.format(10))
# 1000.000000%
# 1000.00%
print('{:>7.2%}'.format(0.12345))
print('{:07.2%}'.format(0.12345))
# 12.35%
# 012.35%