แกะ (ขยายและกำหนดให้กับตัวแปรหลายตัว) tuples และรายการใน Python

ธุรกิจ

ใน Python องค์ประกอบของ tuple หรือ list สามารถขยายและกำหนดให้กับหลายตัวแปรได้ นี้เรียกว่าลำดับการเปิดออกหรือการมอบหมายการคลายการแพ็ค

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

  • การเปิดไฟล์พื้นฐานของทูเพิลและรายการ
  • tuples ที่ซ้อนกัน รายการที่แยกออก
  • การเปิดกล่องด้วยขีดล่าง:_
  • เปิดด้วยเครื่องหมายดอกจัน:*

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

การเปิดไฟล์พื้นฐานของทูเพิลและรายการ

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

t = (0, 1, 2)

a, b, c = t

print(a)
print(b)
print(c)
# 0
# 1
# 2

l = [0, 1, 2]

a, b, c = l

print(a)
print(b)
print(c)
# 0
# 1
# 2

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

a, b = 0, 1

print(a)
print(b)
# 0
# 1

หากจำนวนของตัวแปรไม่ตรงกับจำนวนขององค์ประกอบ ข้อผิดพลาดจะเกิดขึ้น

# a, b = t
# ValueError: too many values to unpack (expected 2)

# a, b, c, d = t
# ValueError: not enough values to unpack (expected 4, got 3)

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

tuples ที่ซ้อนกัน รายการที่แยกออก

ทูเพิลและรายการที่ซ้อนกันยังสามารถแตกออกได้ หากคุณต้องการคลายเนื้อหาด้วย ให้ใส่ตัวแปรลงในรายการใดรายการหนึ่งต่อไปนี้

  • ()
  • []
t = (0, 1, (2, 3, 4))

a, b, c = t

print(a)
print(b)
print(c)
# 0
# 1
# (2, 3, 4)

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

a, b, (c, d, e) = t

print(a)
print(b)
print(c)
print(d)
print(e)
# 0
# 1
# 2
# 3
# 4

แตกไฟล์ด้วย _underscore_

ใน Python ไม่เพียงแต่คลายแพ็ก ค่าที่ไม่ต้องการจะถูกกำหนดตามอัตภาพให้กับขีดล่าง (ขีดล่าง) _ ไม่มีความหมายทางไวยากรณ์พิเศษ พวกมันถูกกำหนดให้กับตัวแปรชื่อ _

t = (0, 1, 2)

a, b, _ = t

print(a)
print(b)
print(_)
# 0
# 1
# 2

เปิดด้วยเครื่องหมายดอกจัน

หากจำนวนตัวแปรน้อยกว่าจำนวนองค์ประกอบ เครื่องหมายดอกจันในชื่อตัวแปรจะทำให้องค์ประกอบถูกกำหนดร่วมกันเป็นรายการ

ไวยากรณ์นี้ถูกนำมาใช้ตั้งแต่ Python 3 และไม่มีให้ใน Python 2

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

t = (0, 1, 2, 3, 4)

a, b, *c = t

print(a)
print(b)
print(c)
# 0
# 1
# [2, 3, 4]

print(type(c))
# <class 'list'>

a, *b, c = t

print(a)
print(b)
print(c)
# 0
# [1, 2, 3]
# 4

*a, b, c = t

print(a)
print(b)
print(c)
# [0, 1, 2]
# 3
# 4

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

a, b, *_ = t

print(a)
print(b)
print(_)
# 0
# 1
# [2, 3, 4]

เช่นเดียวกันสามารถเขียนได้ดังนี้

a, b = t[0], t[1]

print(a)
print(b)
# 0
# 1

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

# *a, b, *c = t
# SyntaxError: two starred expressions in assignment

โปรดทราบว่าแม้แต่องค์ประกอบเดียวที่กำหนดให้กับตัวแปรที่มีเครื่องหมายดอกจันก็ยังถูกกำหนดเป็นรายการ

t = (0, 1, 2)

a, b, *c = t

print(a)
print(b)
print(c)
# 0
# 1
# [2]

print(type(c))
# <class 'list'>

หากไม่มีองค์ประกอบพิเศษ รายการว่างจะถูกกำหนด

a, b, c, *d = t

print(a)
print(b)
print(c)
print(d)
# 0
# 1
# 2
# []