2.4. สตริง

สตริง คือลำดับของอักขระ Unicode ที่เขียนไว้ภายในเครื่องหมายคำพูด การใช้เครื่องหมายคำพูดเดี่ยวหรือคู่มีความเทียบเท่ากัน -- เลือกรูปแบบที่ช่วยให้คุณไม่ต้องใช้อักขระหนีสำหรับเครื่องหมายคำพูดที่ปรากฏในข้อความ:

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

สตริงที่ใช้เครื่องหมายคำพูดสามตัว ("""...""" หรือ '''...''') สามารถครอบคลุมหลายบรรทัดและเก็บรักษาบรรทัดใหม่ไว้ตามที่เป็นจริง:

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

Output:

boot ok
firmware v1.28

2.4.1. ลำดับอักขระหนี

ภายในสตริงปกติ \ จะนำหน้าอักขระพิเศษ:

  • \n -- บรรทัดใหม่

  • \t -- แท็บ

  • \\ -- อักขระแบ็กสแลชตามตัวอักษร

  • \' / \" -- เครื่องหมายคำพูดตามตัวอักษร (เมื่อจะทำให้สตริงสิ้นสุดในสถานการณ์อื่น)

  • \xHH -- อักขระที่มีรหัส hex HH

  • \uHHHH -- โค้ดพอยต์ Unicode HHHH

เมื่อสตริงมีแบ็กสแลชจำนวนมาก ให้เติม r นำหน้าลิเทอรัลเพื่อทำให้เป็นสตริง raw แบ็กสแลชจะถูกตีความตามตัวอักษร -- \n จะยังคงเป็นสองอักขระแทนที่จะถูกแทนที่ด้วยบรรทัดใหม่:

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

2.4.2. การต่อและการทำซ้ำ

สตริงสองตัวเชื่อมกันด้วย +; สตริงทำซ้ำด้วย *:

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

การใช้ + ซ้ำในลูปจะจัดสรรสตริงใหม่ทุกครั้งที่วนซ้ำ สำหรับการสร้างสตริงขนาดใหญ่จากหลายส่วน ให้ใช้ str.join()

2.4.3. ความยาว การจัดทำดัชนี และการแบ่งส่วน

len() คืนค่าจำนวนอักขระในสตริง การจัดทำดัชนีด้วย [] คืนค่าสตริงหนึ่งอักขระที่ตำแหน่งที่กำหนด ดัชนีลบนับจากท้าย:

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

สไลซ์ s[start:stop] คืนค่าสตริงย่อยตั้งแต่ตำแหน่ง start จนถึงแต่ไม่รวม stop ปลายทั้งสองด้านสามารถละเว้นได้เพื่อหมายถึง "ต้น" หรือ "ปลาย" และค่าที่สามที่เป็นตัวเลือก s[start:stop:step] ช่วยให้คุณข้ามอักขระได้

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

ตำแหน่งสไลซ์อยู่ ระหว่าง อักขระ s[2:5] เลือกอักขระในตำแหน่ง 2, 3 และ 4

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

สไลซ์ที่อยู่นอกช่วงจะคืนค่าส่วนที่มีอยู่โดยไม่แจ้งข้อผิดพลาด -- s[100:200] คือสตริงว่าง "" ไม่ใช่ข้อผิดพลาด แต่การจัดทำดัชนีที่อยู่นอกช่วงจะเรียก IndexError

2.4.4. ความไม่เปลี่ยนแปลง

สตริงไม่สามารถแก้ไขในที่เดิมได้ การดำเนินการที่ดูเหมือนว่าจะเปลี่ยนแปลงสตริงจริงๆ แล้วจะคืนค่าสตริงใหม่และทิ้งต้นฉบับไว้เหมือนเดิม:

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

เพื่อ "เปลี่ยน" สตริง ให้ผูกชื่อกับค่าใหม่อีกครั้ง: name = name.upper()