2.5. Metode string dan pemformatan¶
String dilengkapi dengan kotak alat metode bawaan untuk inspeksi dan pembentukan ulang. Karena string bersifat imutabel, setiap metode mengembalikan string baru -- yang asli tidak berubah.
2.5.1. Menginspeksi string¶
str.startswith()/str.endswith()-- uji awalan atau akhiran; mengembalikanbool.str.find()-- posisi kemunculan pertama substring, atau-1jika tidak ada.str.index()melakukan hal yang sama tetapi memunculkanValueErrorjika tidak ditemukan.str.count()-- jumlah kemunculan yang tidak tumpang tindih.inkeyword --"MV" in namemengembalikanTruejika substring ada di mana saja dalam string.
>>> name = "OpenMV Cam"
>>> name.startswith("Open")
True
>>> name.find("MV")
4
>>> name.count("m")
1
>>> "Cam" in name
True
2.5.2. Membersihkan dan mengubah huruf¶
str.strip()-- hapus spasi putih di awal dan akhir. Berikan string karakter untuk menghapus kumpulan kustom (s.strip("/")).str.lower()/str.upper()-- konversi huruf.str.replace()-- substitusi substring.
>>> " hello ".strip()
'hello'
>>> "abc-123".replace("-", "_")
'abc_123'
>>> "OpenMV".lower()
'openmv'
2.5.3. Memisahkan dan menggabungkan¶
str.split()-- pecah string menjadi daftar pada setiap kemunculan separator (default: spasi putih mana pun).str.join()-- kebalikannya: gabungkan urutan string bersama-sama dengan penerima sebagai separator. Ini adalah cara efisien untuk membangun string panjang dari bagian-bagian.
>>> "1,2,3".split(",")
['1', '2', '3']
>>> "hello world".split()
['hello', 'world']
>>> ", ".join(["a", "b", "c"])
'a, b, c'
2.5.4. f-string¶
Cara paling sederhana untuk menginterpolasi nilai ke dalam string adalah f-string -- literal string yang diawali dengan f. Ekspresi apa pun di dalam {} dievaluasi dan disisipkan:
>>> name = "OpenMV"
>>> count = 42
>>> f"{name} saw {count} blobs"
'OpenMV saw 42 blobs'
Titik dua di dalam kurung kurawal memperkenalkan spesifikasi format yang mengontrol bagaimana nilai dirender:
{x:.2f}-- float dengan 2 digit setelah titik desimal.{x:>10}-- rata kanan dalam field 10 karakter.{x:<10}-- rata kiri.{x:0>4}-- isi dengan nol di depan hingga lebar 4.{x:#x}-- heksadesimal dengan awalan0x.{x:b}-- representasi biner.
>>> f"pi is roughly {3.14159:.3f}"
'pi is roughly 3.142'
>>> f"reg = {0xAB:#x}"
'reg = 0xab'
>>> for i in range(3):
... print(f"line {i:0>3}")
line 000
line 001
line 002
Satu = setelah nama ekspresi mencetak nama dan nilainya -- berguna untuk cetak debug cepat:
>>> v = 3.14
>>> print(f"{v=}")
v=3.14
2.5.4.1. Konversi basis bilangan bulat¶
Tiga fungsi bawaan melakukan pekerjaan yang sama seperti spesifikasi format :b / :o / :x tetapi mengembalikan string yang dikonversi secara langsung:
bin()-- basis 2, dengan awalan"0b".oct()-- basis 8, dengan awalan"0o".hex()-- basis 16, dengan awalan"0x".
>>> hex(255)
'0xff'
>>> bin(10)
'0b1010'
>>> oct(8)
'0o10'
Arah sebaliknya -- mengubah string basis-N kembali menjadi bilangan bulat -- menggunakan konstruktor int dengan basis eksplisit:
>>> int("ff", 16)
255
>>> int("0b1010", 2) # the "0b" prefix is allowed
10
Gunakan fungsi-fungsi ini ketika Anda menginginkan string mentah untuk int (untuk baris log, file konfigurasi, dump register). Gunakan spesifikasi format ketika Anda menginginkan padding, lebar, atau mencampur nilai dengan teks lain dalam f-string yang sama.
2.5.5. Gaya pemformatan lama¶
f-string adalah gaya yang direkomendasikan, tetapi dua pendekatan lama masih berfungsi dan muncul dalam kode yang ada:
str.format() -- kurung kurawal dengan argumen posisi atau kata kunci yang diteruskan ke metode .format() pada string template:
>>> "Hello, {}".format(name)
'Hello, OpenMV'
>>> "{0} + {0} = {1}".format(2, 4)
'2 + 2 = 4'
>>> "{name}: {value}".format(name="frames", value=42)
'frames: 42'
Spesifikasi format ({:.2f}, {:>10}, ...) bekerja sama seperti dalam f-string; satu-satunya perbedaan adalah di mana nilai disuplai.
Pemformatan % (gaya printf) -- operator % tunggal mensubstitusi nilai ke dalam kode format, satu nilai per kode. Berikan beberapa nilai sebagai tuple:
>>> "Hello, %s" % name
'Hello, OpenMV'
>>> "%d + %d = %d" % (2, 2, 4)
'2 + 2 = 4'
>>> "%.2f" % 3.14159
'3.14'
Kode tipe yang paling umum adalah %s (string), %d (integer), %f (float), dan %x (hex).
Setiap kode % dapat membawa pengubah antara % dan huruf tipe. Bentuk lengkapnya adalah %[flags][width][.precision]type:
width -- jumlah minimum karakter yang harus diisi field. Nilai yang lebih pendek diisi dengan spasi; nilai yang lebih panjang meluap.
%10dmereservasi 10 karakter dan meratakan kanan angka.precision -- artinya bergantung pada tipe. Untuk float, jumlah digit setelah titik desimal.
%.2fmemberikan dua tempat desimal. Untuk string, jumlah maksimum karakter yang diambil (%.5smemotong hingga lima).Left-align -- flag
-menempatkan field di kiri.%-10dmenempatkan angka di sisi kiri dengan spasi di belakang.Zero pad -- flag
0mengisi dengan nol di depan alih-alih spasi (untuk tipe numerik).%05dzero-pad hingga lima angka.Sign -- flag
+selalu menampilkan tanda pada angka, termasuk+untuk positif.Alternate form -- flag
#. Untuk%xini menambahkan awalan0xpada output; untuk%oawalan0o.
Flag, lebar, dan presisi dapat dikombinasikan:
>>> "%10d" % 42
' 42' # width 10, space-padded, right-aligned
>>> "%-10d|" % 42
'42 |' # width 10, left-aligned
>>> "%05d" % 42
'00042' # width 5, zero-padded
>>> "%8.2f" % 3.14159
' 3.14' # width 8, 2 decimal places
>>> "%08.2f" % 3.14159
'00003.14' # width 8, zero-padded
>>> "%+d" % 42
'+42' # explicit sign
>>> "%#06x" % 0xAB
'0x00ab' # 0x prefix, zero-pad to 6 chars total
Kedua gaya lama lebih lambat untuk dibaca dan lebih rawan kesalahan daripada f-string -- gunakan f-string dalam kode baru, dan kenali bentuk lama ketika membaca kode yang ada.