Sử dụng format() để chèn giá trị vào chuỗi trong Python
Python Tutorial | by
Trong lập trình, chúng ta hiếm khi chỉ in ra những đoạn văn bản cố định. Thay vào đó, bạn sẽ thường xuyên cần kết hợp thông tin tĩnh (như "Tên của bạn là:") với giá trị động từ các biến (như tên người dùng, tuổi, điểm số, v.v.) để tạo ra các thông điệp hoàn chỉnh, dễ đọc và có ý nghĩa. Phương thức .format()
cung cấp một cách có cấu trúc và mạnh mẽ để "điền" các giá trị vào những "chỗ trống" trong một chuỗi mẫu. Đây là một kỹ thuật linh hoạt, giúp bạn kiểm soát cách dữ liệu được hiển thị, từ việc sắp xếp lại thứ tự các thông tin cho đến việc định dạng số thập phân hay căn lề văn bản.
Trong bài viết này, chúng ta sẽ cùng tìm hiểu chi tiết cách hoạt động của .format()
: từ cú pháp cơ bản với các chỗ giữ chỗ đơn giản, đến các tùy chọn nâng cao giúp bạn định dạng đầu ra một cách chính xác. Hãy cùng làm chủ công cụ này để nâng cao khả năng xử lý chuỗi của bạn trong Python!
Cú pháp cơ bản của .format()
trong Python
Sử dụng dấu ngoặc nhọn {}
làm chỗ giữ chỗ
Phương thức .format()
hoạt động dựa trên ý tưởng về các "chỗ giữ chỗ" (placeholders) trong chuỗi. Bạn tạo một chuỗi mẫu và tại những vị trí mà bạn muốn chèn giá trị động, bạn sẽ đặt một cặp dấu ngoặc nhọn {}
. Sau đó, bạn gọi phương thức .format()
trực tiếp trên chuỗi mẫu đó và truyền các giá trị mà bạn muốn điền vào các chỗ giữ chỗ. Python sẽ tự động thay thế mỗi cặp {}
bằng một giá trị tương ứng.
Cách dùng: chuoi_mau.format(gia_tri_1, gia_tri_2, ...)
Cú pháp để sử dụng .format()
rất đơn giản:
-
Viết chuỗi mẫu của bạn với các cặp
{}
tại những vị trí bạn muốn chèn dữ liệu. -
Sau chuỗi mẫu, thêm dấu chấm (
.
) và gọi phương thứcformat()
. -
Truyền các giá trị mà bạn muốn chèn vào làm đối số cho phương thức
format()
, theo đúng thứ tự mà bạn muốn chúng xuất hiện.
Ví dụ cơ bản:
ten = "Lan" tuoi = 20 nghe_nghiep = "sinh viên" # Chuỗi mẫu với các {} làm chỗ giữ chỗ thong_tin = "Tên: {}, Tuổi: {}, Nghề nghiệp: {}." # Gọi .format() và truyền các biến theo thứ tự chuoi_da_dinh_dang = thong_tin.format(ten, tuoi, nghe_nghiep) print(f"Chuỗi mẫu: '{thong_tin}'") print(f"Kết quả sau định dạng: '{chuoi_da_dinh_dang}'") # Kết quả: # Chuỗi mẫu: 'Tên: {}, Tuổi: {}, Nghề nghiệp: {}.' # Kết quả sau định dạng: 'Tên: Lan, Tuổi: 20, Nghề nghiệp: sinh viên.'
Trong ví dụ này:
-
{}
đầu tiên sẽ được thay thế bằng giá trị củaten
("Lan"). -
{}
thứ hai sẽ được thay thế bằng giá trị củatuoi
(20). -
{}
thứ ba sẽ được thay thế bằng giá trị củanghe_nghiep
("sinh viên").
Lưu ý quan trọng:
-
Thứ tự là quan trọng: Khi bạn sử dụng các dấu ngoặc nhọn rỗng (
{}
), các giá trị mà bạn truyền vào.format()
sẽ được điền vào các chỗ giữ chỗ theo đúng thứ tự từ trái sang phải. -
Tự động ép kiểu: Tương tự như f-strings,
.format()
cũng tự động chuyển đổi các giá trị không phải chuỗi (như số, boolean) thành chuỗi trước khi chèn vào. Bạn không cần phải gọistr()
tường minh.
so_san_pham = 5 don_gia = 12.50 da_thanh_toan = True thong_tin_mua_hang = "Bạn đã mua {} sản phẩm với giá {} USD. Đã thanh toán: {}." print(thong_tin_mua_hang.format(so_san_pham, don_gia, da_thanh_toan)) # Kết quả: Bạn đã mua 5 sản phẩm với giá 12.5 USD. Đã thanh toán: True.
Tính bất biến: Giống như các phương thức chuỗi khác, .format()
không làm thay đổi chuỗi gốc. Nó trả về một chuỗi MỚI đã được định dạng. Bạn cần gán kết quả này vào một biến để sử dụng.
Các cách đặt chỗ giữ chỗ trong .format()
trong Python
Phương thức .format()
mang lại sự linh hoạt đáng kể trong việc xác định các "chỗ trống" trong chuỗi mẫu và cách các giá trị được điền vào đó. Bạn có thể kiểm soát điều này thông qua ba loại chỗ giữ chỗ chính.
Chỗ giữ chỗ rỗng {}
(Mặc định)
-
Mục đích: Đây là kiểu chỗ giữ chỗ đơn giản nhất. Khi bạn sử dụng các cặp ngoặc nhọn rỗng
{}
, Python sẽ điền các giá trị bạn truyền vào phương thức.format()
theo đúng thứ tự tuần tự từ trái sang phải. -
Cách hoạt động: Vị trí của mỗi
{}
trong chuỗi mẫu tương ứng với vị trí của đối số trongformat()
.{}
đầu tiên lấy đối số đầu tiên,{}
thứ hai lấy đối số thứ hai, và cứ thế tiếp tục.
Ví dụ:
mon_an = "Phở" gia = 35000 dia_diem = "Hà Nội" # Các giá trị được điền vào theo đúng thứ tự: mon_an, gia, dia_diem cau_mo_ta = "Món ăn: {}, Giá: {} VND, Địa điểm: {}.".format(mon_an, gia, dia_diem) print(f"Sử dụng chỗ giữ chỗ rỗng: '{cau_mo_ta}'") # Kết quả: Món ăn: Phở, Giá: 35000 VND, Địa điểm: Hà Nội.
-
Đây là cách phổ biến khi bạn có một số lượng nhỏ các biến và thứ tự của chúng trong câu là cố định.
Chỗ giữ chỗ với chỉ mục {index}
-
Mục đích: Kiểu này cho phép bạn chỉ định rõ ràng đối số nào sẽ điền vào chỗ giữ chỗ nào bằng cách sử dụng chỉ mục số bên trong dấu ngoặc nhọn (ví dụ:
{0}
,{1}
,{2}
,...). Chỉ mục bắt đầu từ0
cho đối số đầu tiên của.format()
.
Lợi ích:
-
Kiểm soát thứ tự: Bạn có thể đảo ngược thứ tự các giá trị hoặc sắp xếp chúng theo ý muốn, không phụ thuộc vào thứ tự trong
format()
. -
Tái sử dụng giá trị: Bạn có thể chèn cùng một giá trị nhiều lần ở các vị trí khác nhau trong chuỗi mẫu mà chỉ cần truyền nó một lần vào
format()
.
Ví dụ:
thu_nhat = "Táo" # Chỉ mục 0 thu_hai = "Cam" # Chỉ mục 1 thu_ba = "Ổi" # Chỉ mục 2 # Dùng chỉ mục để đảo ngược thứ tự cau_dao_nguoc = "Tôi thích {1} hơn {0}." .format(thu_nhat, thu_hai) print(f"Đảo ngược thứ tự: '{cau_dao_nguoc}'") # Kết quả: Tôi thích Cam hơn Táo. # Dùng chỉ mục để lặp lại giá trị cau_lap_lai = "Món quà là {0}, {0} và {0}!".format("Kẹo") print(f"Lặp lại giá trị: '{cau_lap_lai}'") # Kết quả: Món quà là Kẹo, Kẹo và Kẹo! # Sử dụng chỉ mục ngẫu nhiên cau_ngau_nhien = "Tôi có {2} quả, bạn có {0} quả và anh ấy có {1} quả.".format(thu_nhat, thu_hai, thu_ba) print(f"Sử dụng chỉ mục ngẫu nhiên: '{cau_ngau_nhien}'") # Kết quả: Tôi có Ổi quả, bạn có Táo quả và anh ấy có Cam quả.
Chỗ giữ chỗ với tên {ten_bien}
(Named Placeholders)
Mục đích: Đây là cách định dạng rõ ràng và dễ đọc nhất, đặc biệt khi chuỗi mẫu của bạn có nhiều chỗ giữ chỗ hoặc các giá trị có ý nghĩa rõ ràng. Bạn gán một tên cho mỗi chỗ giữ chỗ trong dấu ngoặc nhọn (ví dụ: {item}
, {quantity}
). Sau đó, khi gọi .format()
, bạn truyền các đối số dưới dạng cặp khóa-giá trị (key=value
) tương ứng với các tên đã đặt.
Lợi ích:
-
Tăng khả năng đọc: Khi đọc chuỗi mẫu, bạn có thể ngay lập tức hiểu giá trị nào sẽ được chèn vào đâu mà không cần nhớ thứ tự của các đối số.
-
Dễ bảo trì: Nếu thứ tự các biến trong
.format()
thay đổi, bạn không cần phải sửa chuỗi mẫu, miễn là tên chỗ giữ chỗ vẫn đúng.
Ví dụ:
san_pham_ten = "Sách Python" so_luong_mua = 3 don_gia = 50000 # Tính toán tổng tiền ngay trong biến tong_tien = don_gia * so_luong_mua # Sử dụng tên cho chỗ giữ chỗ chi_tiet_don_hang = "Đơn hàng: {item} - Số lượng: {qty} - Đơn giá: {price} VND - Tổng cộng: {total} VND." # Truyền đối số dưới dạng key=value chuoi_dinh_dang_ten = chi_tiet_don_hang.format( item=san_pham_ten, qty=so_luong_mua, price=don_gia, total=tong_tien ) print(f"Định dạng với tên chỗ giữ chỗ: '{chuoi_dinh_dang_ten}'") # Kết quả: Đơn hàng: Sách Python - Số lượng: 3 - Đơn giá: 50000 VND - Tổng cộng: 150000 VND.
Việc lựa chọn kiểu chỗ giữ chỗ nào tùy thuộc vào độ phức tạp và yêu cầu về tính dễ đọc của chuỗi mẫu của bạn. Đối với các chuỗi đơn giản, rỗng ( {} )
hoặc chỉ mục ( {index} )
có thể đủ. Nhưng khi chuỗi trở nên phức tạp hơn, việc sử dụng tên chỗ giữ chỗ sẽ giúp mã của bạn rõ ràng hơn rất nhiều.
Định dạng nâng cao trong .format()
trong Python
Ngoài việc chỉ chèn các giá trị, phương thức .format()
còn cho phép bạn kiểm soát chặt chẽ cách các giá trị đó được hiển thị. Điều này bao gồm định dạng số (số thập phân, dấu phẩy phân cách hàng nghìn), căn lề văn bản, và nhiều tùy chọn khác. Cú pháp để thực hiện định dạng nâng cao là:
{chỉ_mục_hoặc_tên:định_dạng}
Trong đó:
-
chỉ_mục_hoặc_tên
: Là chỉ mục số (ví dụ:0
,1
) hoặc tên (ví dụ:ten
,tuoi
) của đối số mà bạn muốn định dạng, giống như chúng ta đã học ở phần trước. -
:định_dạng
: Là dấu hai chấm theo sau bởi một chuỗi ký tự định dạng đặc biệt, chỉ định cách giá trị sẽ được hiển thị.
Hãy xem xét các ví dụ cụ thể:
Định dạng số thập phân và số nguyên
Bạn có thể kiểm soát số chữ số sau dấu thập phân, hoặc cách hiển thị số nguyên/thực.
Làm tròn số thập phân (.nf
): Dùng .
theo sau bởi số chữ số thập phân (n
) và ký tự f
(float).
pi = 3.14159265 gia_sach = 19.999 # Chỉ hiển thị 2 chữ số thập phân print("Giá trị của Pi là: {:.2f}".format(pi)) # Kết quả: Giá trị của Pi là: 3.14 print("Giá sách: {:.2f} USD".format(gia_sach)) # Kết quả: Giá sách: 20.00 USD (làm tròn)
Thêm dấu phẩy phân cách hàng nghìn (:,
hoặc :,.2f
):
doanh_thu = 123456789 chi_phi = 987654.321 # Thêm dấu phẩy cho số nguyên print("Doanh thu: {:,} VND".format(doanh_thu)) # Kết quả: Doanh thu: 123,456,789 VND # Thêm dấu phẩy và 2 chữ số thập phân cho số thực print("Chi phí: {:,.2f} VND".format(chi_phi)) # Kết quả: Chi phí: 987,654.32 VND
Hiển thị dưới dạng phần trăm (%
):
ti_le_hoan_thanh = 0.75 # Hiển thị dưới dạng phần trăm với 1 chữ số thập phân print("Hoàn thành: {:.1%}".format(ti_le_hoan_thanh)) # Kết quả: Hoàn thành: 75.0%
Định dạng căn lề và độ rộng
Bạn có thể điều khiển cách chuỗi hoặc số được căn chỉnh trong một khoảng không gian nhất định.
-
Căn trái (
<n
): Căn chuỗi sang trái trong một độ rộngn
ký tự. -
Căn phải (
>n
): Căn chuỗi sang phải trong một độ rộngn
ký tự. -
Căn giữa (
^n
): Căn chuỗi vào giữa trong một độ rộngn
ký tự.
chuoi = "Python" # Căn giữa trong 10 ký tự print("'{:^10}'".format(chuoi)) # Kết quả: ' Python ' # Căn trái trong 10 ký tự print("'{:<10}'".format(chuoi)) # Kết quả: 'Python ' # Căn phải trong 10 ký tự print("'{:>10}'".format(chuoi)) # Kết quả: ' Python'
Điền ký tự vào khoảng trống: Bạn có thể chỉ định một ký tự để điền vào các khoảng trống còn lại sau khi căn lề, bằng cách đặt ký tự đó ngay trước dấu căn lề (<
, >
, ^
).
mon_hang = "Bánh" gia = 25000 # Căn trái tên món hàng, điền bằng dấu gạch ngang print("Món: {:.<10} Giá: {} VND".format(mon_hang, gia)) # Kết quả: Món: Bánh...... Giá: 25000 VND
Các ví dụ kết hợp
Bạn có thể kết hợp các định dạng nâng cao với chỉ mục hoặc tên chỗ giữ chỗ.
san_pham = "Áo khoác" don_gia = 299.95 so_luong = 3 # Kết hợp chỉ mục và định dạng: # {0:^15}: Tên sản phẩm (chỉ mục 0), căn giữa trong 15 ký tự # {1:>10.2f}: Đơn giá (chỉ mục 1), căn phải trong 10 ký tự, 2 số thập phân # {2:>10.2f}: Tổng tiền (chỉ mục 2), căn phải trong 10 ký tự, 2 số thập phân bang_ke_chi_tiet = "{:^15} | {:>10} | {:>10}\n".format("SẢN PHẨM", "ĐƠN GIÁ", "SỐ LƯỢNG") bang_ke_chi_tiet += "{:-<15}-+-{:-<10}-+-{:-<10}\n".format("", "", "") # Đường kẻ bang_ke_chi_tiet += "{:<15} | {:>10.2f} | {:>10}".format(san_pham, don_gia, so_luong) print(bang_ke_chi_tiet) # Kết quả: # SẢN PHẨM | ĐƠN GIÁ | SỐ LƯỢNG # ---------------+- ----------+- ---------- # Áo khoác | 299.95 | 3
Với khả năng định dạng nâng cao, .format()
trở thành một công cụ mạnh mẽ để trình bày dữ liệu một cách rõ ràng, đẹp mắt và phù hợp với nhiều yêu cầu đầu ra khác nhau.
Ứng dụng thực tế của .format()
trong Python
Phương thức .format()
cho phép bạn tạo ra các chuỗi đầu ra động và được định dạng tốt, điều này rất cần thiết trong nhiều khía cạnh của lập trình.
Tạo thông báo thân thiện với người dùng
Đây là một trong những ứng dụng phổ biến nhất. Khi bạn muốn hiển thị thông tin cá nhân hóa hoặc tạo ra các thông báo phản hồi cho người dùng, .format()
giúp bạn chèn các giá trị của biến vào chuỗi một cách dễ dàng và rõ ràng.
-
Ví dụ: Chúc mừng kết quả thi
ten_nguoi_dung = "Mai" diem_thi = 85 mon_hoc = "Toán" # Định dạng thông báo chúc mừng thong_bao = "Chúc mừng {} đã đạt {} điểm trong môn {}!".format(ten_nguoi_dung, diem_thi, mon_hoc) print(thong_bao) # Kết quả: Chúc mừng Mai đã đạt 85 điểm trong môn Toán!
Ví dụ: Thông báo trạng thái giao dịch
so_tien_giao_dich = 1250000.75 ngay_giao_dich = "15/07/2025" # Current date trang_thai = "thành công" # Sử dụng định dạng số có dấu phẩy cho tiền thong_bao_giao_dich = "Giao dịch ngày {} với số tiền {:.2f} VND đã {}.".format( ngay_giao_dich, so_tien_giao_dich, trang_thai ) print(thong_bao_giao_dich) # Kết quả: Giao dịch ngày 15/07/2025 với số tiền 1250000.75 VND đã thành công.
In bảng dữ liệu, báo cáo
Khi bạn cần trình bày dữ liệu theo dạng bảng hoặc báo cáo, .format()
với khả năng căn lề và định dạng số nâng cao là công cụ tuyệt vời để tạo ra đầu ra thẳng hàng và dễ đọc.
-
Ví dụ: Bảng kê sản phẩm
san_pham_1 = "Bánh mì" don_gia_1 = 15.5 sl_1 = 10 san_pham_2 = "Sữa tươi" don_gia_2 = 22.0 sl_2 = 5 # Tiêu đề bảng (căn trái cho Sản phẩm, căn phải cho Đơn giá và Tổng) print("{:<15} {:>10} {:>10}".format("Sản phẩm", "Đơn giá", "Tổng")) print("-" * 35) # Dòng kẻ phân cách # Dòng dữ liệu cho sản phẩm 1: # {:<15}: Sản phẩm căn trái trong 15 ký tự # {:>10.2f}: Đơn giá căn phải trong 10 ký tự, 2 chữ số thập phân # {:>10.2f}: Tổng tiền căn phải trong 10 ký tự, 2 chữ số thập phân print("{:<15} {:>10.2f} {:>10.2f}".format(san_pham_1, don_gia_1, don_gia_1 * sl_1)) # Dòng dữ liệu cho sản phẩm 2 print("{:<15} {:>10.2f} {:>10.2f}".format(san_pham_2, don_gia_2, don_gia_2 * sl_2)) # Kết quả: # Sản phẩm Đơn giá Tổng # ----------------------------------- # Bánh mì 15.50 155.00 # Sữa tươi 22.00 110.00
Ghi log hoặc debug chương trình
Khi phát triển phần mềm, việc ghi lại các sự kiện (logging) hoặc in ra giá trị của biến để kiểm tra (debugging) là rất quan trọng. .format()
giúp tạo ra các thông điệp log có cấu trúc và dễ hiểu.
-
Ví dụ: Ghi log sự kiện
thoi_gian = "22:54:28" # Current time ten_chuc_nang = "Đăng nhập" ket_qua = "thành công" ma_loi = "N/A" # Định dạng thông điệp log log_message = "[{}] Chức năng: {}, Kết quả: {}, Mã lỗi: {}.".format( thoi_gian, ten_chuc_nang, ket_qua, ma_loi ) print(log_message) # Kết quả: [22:54:28] Chức năng: Đăng nhập, Kết quả: thành công, Mã lỗi: N/A.
Ví dụ: Debug giá trị biến
x = 15 y = 7 z = x / y # In ra giá trị biến và kết quả phép tính để debug debug_info = "DEBUG: x = {}, y = {}, x/y = {:.3f}".format(x, y, z) print(debug_info) # Kết quả: DEBUG: x = 15, y = 7, x/y = 2.143
Như bạn thấy, phương thức .format()
là một công cụ rất linh hoạt và cần thiết cho nhiều tác vụ liên quan đến việc tạo và hiển thị văn bản động trong Python. Việc làm chủ nó sẽ nâng cao đáng kể khả năng xử lý chuỗi của bạn.
Kết bài
Bạn đã cùng tôi timf kiếm chi tiết phương thức .format()
– một công cụ mạnh mẽ và linh hoạt để chèn giá trị vào chuỗi trong Python. Chúng ta đã đi từ cú pháp cơ bản với các chỗ giữ chỗ {}
đến việc kiểm soát thứ tự bằng chỉ mục ({index}
), gán tên cho chỗ giữ chỗ ({ten_bien}
), và cả những tùy chọn định dạng nâng cao để hiển thị dữ liệu một cách chính xác và đẹp mắt.
Hãy ghi nhớ những điểm chính sau:
-
.format()
là một phương thức của chuỗi, cho phép bạn tạo ra các chuỗi động bằng cách điền giá trị vào các chỗ giữ chỗ đã định nghĩa sẵn ({}
,{index}
,{ten_bien}
). -
Nó tự động ép kiểu dữ liệu (số, boolean, v.v.) thành chuỗi, giúp bạn không cần gọi
str()
thủ công. -
Bạn có thể sử dụng các ký hiệu định dạng nhỏ (mini-language) bên trong dấu ngoặc nhọn (ví dụ:
:.2f
,:^10
) để kiểm soát số chữ số thập phân, căn lề, thêm dấu phẩy, v.v.
Mặc dù .format()
là một phương thức tuyệt vời và vẫn được sử dụng rộng rãi, đặc biệt là trong các dự án cũ hơn hoặc khi cần kiểm soát thứ tự đối số một cách tường minh, nhưng trong Python 3.6 trở lên, f-strings thường được ưu tiên hơn vì cú pháp gọn gàng và dễ đọc hơn, cũng như khả năng nhúng biểu thức trực tiếp.