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-- อักขระที่มีรหัส hexHH\uHHHH-- โค้ดพอยต์ UnicodeHHHH
เมื่อสตริงมีแบ็กสแลชจำนวนมาก ให้เติม 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] ช่วยให้คุณข้ามอักขระได้
ตำแหน่งสไลซ์อยู่ ระหว่าง อักขระ 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()