Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

So sánh định dạng chuỗi Python: % vs .format()

Python có 2 cách chính format chuỗi cũ: toán tử % và phương thức .format(). (Python 3.6+ còn có f-string - tốt hơn cả hai).

Vấn đề của toán tử %

Toán tử % nhận một giá trị đơn hoặc một tuple. Điều này gây lỗi ngầm khi format tuple:

my_tuple = (1, 2, 3)
"My tuple: %s" % my_tuple
# TypeError: not all arguments converted during string formatting

Python hiểu my_tuple là 3 đối số riêng lẻ chứ không phải 1 tuple đơn. Phải gói lại:

"My tuple: %s" % (my_tuple,)  # OK: tuple đơn chứa tuple

Ưu điểm của .format()

  • Không có vấn đề tuple ambiguities.
  • Cú pháp rõ ràng, mạnh mẽ hơn: "{0} {1}".format(a, b), "{name}".format(name="value").
  • Hỗ trợ format spec chi tiết: "{:.2f}".format(3.14159).
  • Có thể truy cập attribute/item: "{0.name}".format(obj).

Ví dụ so sánh

# % operator
"Hello %s, you have %d messages" % ("Alice", 5)

# .format()
"Hello {}, you have {} messages".format("Alice", 5)
"Hello {name}, you have {count} messages".format(name="Alice", count=5)

# f-string (Python 3.6+) - TỐT NHẤT
name = "Alice"
count = 5
f"Hello {name}, you have {count} messages"

Khuyến nghị

  • Python 3.6+: Dùng f-string (nhanh nhất, dễ đọc nhất, an toàn).
  • Python 3.0-3.5: Dùng .format().
  • Tránh: Toán tử % (trừ logging module yêu cầu).