Python ใช้ * (single asterisk) และ ** (double asterisk) ในบริบทหลายอย่าง
1. Infix Operator (คูณ / ซ้ำ)
# ตัวเลข
print(20 * 10) # 200
print(2.5 * 5.1) # 12.75
print((4+5j) * (5+4j)) # 41j
# Sequence repetition
print("Point-" * 4) # Point-Point-Point-Point-
print([4,5,6] * 3) # [4,5,6,4,5,6,4,5,6]
print((9,8,7) * 2) # (9,8,7,9,8,7)
2. Prefix Operator: Unpacking (แตก sequence)
week_days = ['Mon','Tue','Wed','Thu','Fri']
print(*week_days) # Mon Tue Wed Thu Fri
# ใน function call
def greet(a, b, c):
print(a, b, c)
greet(*['Hello', 'World', '!']) # Hello World !
3. Variable Positional Arguments (*args)
def many_sums(*args):
return sum(args)
print(many_sums(1, 2)) # 3
print(many_sums(11, 21, 30)) # 62
print(many_sums(5.5, 0)) # 5.5
4. Keyword Arguments (**kwargs)
def join_keys(**kwargs):
return ''.join(kwargs.keys())
def join_values(**kwargs):
return ''.join(kwargs.values())
print(join_keys(day1="Mon-", day2="Tue-", day3="Wed-")) # day1day2day3
print(join_values(day1="Mon-", day2="Tue-", day3="Wed-")) # Mon-Tue-Wed-
5. ใช้ร่วมกันใน Function Definition
def demo(a, b, *args, **kwargs):
print("a,b:", a, b)
print("args:", args)
print("kwargs:", kwargs)
demo(1, 2, 3, 4, 5, x=10, y=20)
# a,b: 1 2
# args: (3, 4, 5)
# kwargs: {'x': 10, 'y': 20}
สรุป
*→ positional: unpack sequence, *args**→ keyword: unpack dict, **kwargs- ทำให้ฟังก์ชันยืดหยุ่น รับอาร์กิวเมนต์ได้ไม่จำกัด