2.4. Chuỗi ký tự

Một chuỗi ký tự là một dãy các ký tự Unicode được viết trong dấu ngoặc. Dấu ngoặc đơn và dấu ngoặc kép tương đương nhau -- chọn kiểu nào giúp bạn tránh phải thoát các dấu ngoặc xuất hiện bên trong văn bản:

name    = "OpenMV Cam"
company = 'OpenMV, LLC'
message = "She said \"hi\""        # both styles can be used
same    = 'She said "hi"'

Chuỗi ký tự dùng ba dấu ngoặc ("""...""" hoặc '''...''') trải dài trên nhiều dòng và giữ nguyên các ký tự xuống dòng:

banner = """boot ok
firmware v1.28
"""
print(banner)

Kết quả:

boot ok
firmware v1.28

2.4.1. Ký tự thoát

Trong một chuỗi thông thường, \ bắt đầu một ký tự đặc biệt:

  • \n -- xuống dòng

  • \t -- tab

  • \\ -- dấu gạch chéo ngược theo nghĩa đen

  • \' / \" -- dấu ngoặc theo nghĩa đen (khi nó sẽ kết thúc chuỗi)

  • \xHH -- ký tự có mã hex HH

  • \uHHHH -- điểm mã Unicode HHHH

Khi một chuỗi chứa nhiều dấu gạch chéo ngược, hãy thêm tiền tố r trước chuỗi để biến nó thành chuỗi thô. Lúc này các dấu gạch chéo ngược được hiểu theo nghĩa đen -- \n giữ nguyên hai ký tự thay vì được thay bằng ký tự xuống dòng:

win_path = r"C:\Users\OpenMV\camera.py"
literal  = r"\n is two characters, not a newline"

2.4.2. Nối chuỗi và lặp

Hai chuỗi được nối bằng +; một chuỗi được lặp lại bằng *:

greeting = "Hello, " + name + "!"
line     = "-" * 40              # 40-character separator

Dùng + lặp lại trong vòng lặp sẽ cấp phát một chuỗi mới trong mỗi lần lặp. Để xây dựng chuỗi lớn từ nhiều phần, hãy dùng str.join().

2.4.3. Độ dài, chỉ mục và cắt lát

len() trả về số ký tự trong chuỗi. Dùng chỉ mục với [] trả về một chuỗi gồm một ký tự tại vị trí đó; chỉ mục âm đếm từ cuối chuỗi:

>>> s = "OpenMV"
>>> len(s)
6
>>> s[0]
'O'
>>> s[-1]
'V'

Một lát cắt s[start:stop] trả về chuỗi con từ vị trí start đến nhưng không bao gồm stop. Có thể bỏ qua một trong hai đầu để có nghĩa "đầu chuỗi" hoặc "cuối chuỗi", và giá trị thứ ba tùy chọn s[start:stop:step] cho phép bỏ qua các ký tự.

The string "OpenMV" with position markers between each character, illustrating how a slice selects the characters between two positions.

Vị trí lát cắt nằm giữa các ký tự. s[2:5] chọn các ký tự ở vị trí 2, 3 và 4.

>>> s = "OpenMV"
>>> s[2:5]
'enM'
>>> s[:3]
'Ope'
>>> s[3:]
'nMV'
>>> s[::-1]
'VMnepO'                     # whole string, reversed

Lát cắt ngoài phạm vi sẽ trả về phần tồn tại một cách âm thầm -- s[100:200] là chuỗi rỗng "" chứ không phải lỗi. Trái lại, chỉ mục ngoài phạm vi sẽ gây ra IndexError.

2.4.4. Tính bất biến

Chuỗi không thể thay đổi tại chỗ. Các thao tác trông như thể thay đổi chuỗi thực ra trả về một chuỗi mới và giữ nguyên bản gốc:

>>> name = "OpenMV"
>>> name.upper()
'OPENMV'
>>> name
'OpenMV'                     # unchanged

Để "thay đổi" một chuỗi, hãy gán lại tên biến với giá trị mới: name = name.upper().