Tuples ที่มีองค์ประกอบเดียวใน Python ต้องใช้เครื่องหมายจุลภาคต่อท้าย

ธุรกิจ

ทูเปิลส์ ซึ่งเป็นอ็อบเจกต์ลำดับที่ไม่เปลี่ยนรูป (เปลี่ยนไม่ได้) ใน Python

ต้องใช้ความระมัดระวังเมื่อสร้างสิ่งอันดับด้วยองค์ประกอบเดียวหรือสิ่งอันดับที่ว่างเปล่า

รายละเอียดต่อไปนี้อธิบายไว้ที่นี่

  • Tuple ที่มี 1 องค์ประกอบ
  • วงเล็บกลมทูเพิลสามารถละเว้นได้
  • ทูเพิลว่าง
  • ทูเพิลในอาร์กิวเมนต์ของฟังก์ชัน

Tuple ที่มี 1 องค์ประกอบ

หากคุณพยายามสร้างทูเพิลด้วยองค์ประกอบเดียวและเขียนเพียงวัตถุเดียวในวงเล็บกลม () วงเล็บกลม () จะถูกละเว้นและประมวลผลและไม่ถือว่าเป็นทูเปิล

single_tuple_error = (0)

print(single_tuple_error)
print(type(single_tuple_error))
# 0
# <class 'int'>

ต้องใช้เครื่องหมายจุลภาคต่อท้ายเพื่อสร้างทูเพิลที่มีองค์ประกอบเดียว

single_tuple = (0, )

print(single_tuple)
print(type(single_tuple))
# (0,)
# <class 'tuple'>

ตัวอย่างเช่น เมื่อใช้ตัวดำเนินการ + เพื่อเชื่อม tuples หลายตัว โปรดทราบว่าหากคุณพยายามเพิ่มองค์ประกอบหนึ่งองค์ประกอบและลืมเครื่องหมายจุลภาค คุณจะได้รับข้อผิดพลาด

# print((0, 1, 2) + (3))
# TypeError: can only concatenate tuple (not "int") to tuple

print((0, 1, 2) + (3, ))
# (0, 1, 2, 3)

วงเล็บกลมทูเพิลสามารถละเว้นได้

สาเหตุที่ tuple ที่มีองค์ประกอบหนึ่งต้องการเครื่องหมายจุลภาคก็เพราะ tuple ไม่ใช่ค่าที่อยู่ในวงเล็บเหลี่ยม () แต่เป็นค่าที่คั่นด้วยเครื่องหมายจุลภาค

เป็นเครื่องหมายจุลภาคที่สร้างทูเพิล ไม่ใช่วงเล็บกลม
Tuples — Built-in Types — Python 3.10.4 Documentation

แม้ว่าวงเล็บกลม () จะถูกละเว้น แต่จะถูกประมวลผลเป็นทูเพิล

t = 0, 1, 2

print(t)
print(type(t))
# (0, 1, 2)
# <class 'tuple'>

โปรดทราบว่าเครื่องหมายจุลภาคที่ไม่จำเป็นหลังอ็อบเจ็กต์ถือเป็นทูเพิล

t_ = 0,

print(t_)
print(type(t_))
# (0,)
# <class 'tuple'>

ทูเพิลว่าง

ดังที่กล่าวไว้ข้างต้น วงเล็บเหลี่ยม () สามารถละเว้นได้เมื่อเป็นตัวแทนของทูเพิล แต่จำเป็นเมื่อสร้างทูเพิลเปล่า

การเว้นวรรคหรือเครื่องหมายจุลภาคเพียงอย่างเดียวจะส่งผลให้เกิด SyntaxError

empty_tuple = ()

print(empty_tuple)
print(type(empty_tuple))
# ()
# <class 'tuple'>

# empty_tuple_error = 
# SyntaxError: invalid syntax

# empty_tuple_error = ,
# SyntaxError: invalid syntax

# empty_tuple_error = (,)
# SyntaxError: invalid syntax

tuples ว่างยังสามารถสร้างขึ้นโดย tuple() โดยไม่มีอาร์กิวเมนต์

empty_tuple = tuple()

print(empty_tuple)
print(type(empty_tuple))
# ()
# <class 'tuple'>

ทูเพิลในอาร์กิวเมนต์ของฟังก์ชัน

ต้องใช้วงเล็บเหลี่ยมทูเพิล () แม้ว่าจะมีความกำกวมทางวากยสัมพันธ์

อาร์กิวเมนต์ของฟังก์ชันถูกคั่นด้วยเครื่องหมายจุลภาค แต่ในกรณีนี้ จำเป็นต้องระบุอย่างชัดเจนว่าฟังก์ชันนั้นเป็น tuple หรือไม่โดยการมีหรือไม่มีวงเล็บกลม ()

หากไม่มีวงเล็บ () แต่ละค่าจะถูกส่งผ่านไปยังแต่ละอาร์กิวเมนต์ ด้วยวงเล็บ () แต่ละค่าจะถูกส่งผ่านเป็นทูเพิลไปยังอาร์กิวเมนต์เดียว

def example(a, b):
    print(a, type(a))
    print(b, type(b))

example(0, 1)
# 0 <class 'int'>
# 1 <class 'int'>

# example((0, 1))
# TypeError: example() missing 1 required positional argument: 'b'

example((0, 1), 2)
# (0, 1) <class 'tuple'>
# 2 <class 'int'>

ถ้า tuple ถูกทำเครื่องหมายด้วยเครื่องหมายดอกจัน * องค์ประกอบของ tuple สามารถขยายและส่งผ่านเป็นอาร์กิวเมนต์ได้

example(*(0, 1))
# 0 <class 'int'>
# 1 <class 'int'>

สำหรับข้อมูลเพิ่มเติม โปรดดูบทความต่อไปนี้