เรียน Python: การ Pack และ Unpack ค่าของ Tuple หรือ Dictionary ด้วย * และ **

* และ ** มี 2 บทบาทหลักใน Python

  1. ตอนประกาศฟังก์ชัน (Function Definition) → ใช้ "รวบ" ค่า
  2. ตอนเรียกฟังก์ชันหรือสร้างข้อมูล (Call/Expression) → ใช้ "แตก" ค่า (Unpack)

หลายคนจำสลับกันช่วงแรก


1. ใน Function Definition = รวบ

def demo(*args, **kwargs):
print(args)
print(kwargs)

เรียก

demo(1, 2, 3, name="John")

ผลลัพธ์

args   = (1, 2, 3)
kwargs = {'name': 'John'}

ตรงนี้

*args
**kwargs

คือ "เก็บรวม"


2. ตอนเรียก Function = แตก

มี Tuple

data = (10, 20)

ฟังก์ชัน

def add(a, b):
return a + b

เรียก

add(*data)

Python จะมองเป็น

add(10, 20)

ตรงนี้ * คือ "แตก Tuple"


แตก List ก็ได้

numbers = [1, 2, 3]

print(*numbers)

ผลลัพธ์

1 2 3

เทียบกับ

print(numbers)

ผลลัพธ์

[1, 2, 3]

** ใช้แตก Dict

data = {
"name": "John",
"age": 25
}

ฟังก์ชัน

def create_user(name, age):
print(name, age)

เรียก

create_user(**data)

Python จะมองเป็น

create_user(
name="John",
age=25
)

ความว้าว: ใช้นอก Function ก็ได้

ตั้งแต่ Python 3 เป็นต้นมา

แตก List

a = [1, 2]
b = [3, 4]

c = [*a, *b]

print(c)

ผลลัพธ์

[1, 2, 3, 4]

เหมือน JavaScript Spread Operator มาก


แตก Tuple

a = (1, 2)
b = (3, 4)

c = (*a, *b)

print(c)

ผลลัพธ์

(1, 2, 3, 4)

แตก Set

a = {1, 2}
b = {3, 4}

c = {*a, *b}

print(c)

ผลลัพธ์

{1, 2, 3, 4}

แตก Dict

user = {
"name": "John"
}

extra = {
"age": 25
}

merged = {
**user,
**extra
}

print(merged)

ผลลัพธ์

{
'name': 'John',
'age': 25
}

ถ้า Key ซ้ำกันล่ะ?

a = {
"name": "John"
}

b = {
"name": "Bob"
}

c = {
**a,
**b
}

ผลลัพธ์

{
'name': 'Bob'
}

ตัวหลังชนะ


วิธีจำง่าย ๆ

ให้มองว่า

*

แปลว่า

"แตกสมาชิกออกทีละตัว"

เช่น

(1, 2, 3)

กลายเป็น

1, 2, 3

และ

**

แปลว่า

"แตก key=value ออกมา"

เช่น

{
"name": "John",
"age": 25
}

กลายเป็น

name="John",
age=25

ดังนั้นคู่ที่สวยที่สุดในการจำคือ

ฝั่งประกาศฝั่งเรียก
*argsfunc(*tuple_or_list)
**kwargsfunc(**dict)

ฝั่งซ้าย = รวบ (Pack)

def func(*args, **kwargs):

ฝั่งขวา = แตก (Unpack)

func(*items, **options)

นี่คือแนวคิดเดียวกันกับที่อยู่เบื้องหลังการ swap ตัวแปร, tuple unpacking, multiple return values และ framework ต่าง ๆ ใน Python ทั้งหมดเลยครับ

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

รับติดตั้งระบบป้ายโฆษณาดิจิตอล Digital Signage ตั้งเวลาทำงานและควบคุมผ่าน Internet ได้

แจกฟรี ระบบแสดงคิวงาน สำหรับร้านนวด สปา หรือ ร้านทำผม

บริการออกแบบ Character Agent สำหรับธุรกิจ

ป้ายดิจิตอลที่โต้ตอบได้