การ์ดและไวลด์การ์ด
เพิ่มเงื่อนไขและกรณีครอบคลุมทั้งหมด
การ์ดและไวลด์การ์ด เป็นบทเรียน Python Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Python Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน
การปรับการจับคู่ให้ละเอียดขึ้น
บางครั้งรูปแบบเชิงโครงสร้างเพียงอย่างเดียวยังไม่พอ คุณยังต้องการเงื่อนไขด้วย เงื่อนไขกำกับจะเพิ่มการทดสอบด้วย if ให้กับกรณี และรูปแบบไวลด์การ์ดจะช่วยสร้างกรณีครอบคลุมที่ยืดหยุ่น
การเพิ่มเงื่อนไขกำกับ
เขียน if <condition> ต่อท้ายรูปแบบ กรณีจะตรงกันก็ต่อเมื่อรูปแบบตรงกันและเงื่อนไขกำกับเป็นจริง
n = 7
match n:
case x if x < 0:
print('negative')
case x if x == 0:
print('zero')
case x if x > 0:
print('positive')เงื่อนไขกำกับใช้ชื่อที่จับค่าไว้
เงื่อนไขกำกับสามารถอ้างอิงตัวแปรที่รูปแบบผูกค่าไว้ได้ ในที่นี้คู่ค่าที่จับไว้จะถูกตรวจสอบว่ามีค่าเท่ากันหรือไม่
point = [3, 3]
match point:
case [x, y] if x == y:
print('on the diagonal')
case [x, y]:
print('off the diagonal')เมื่อเงื่อนไขกำกับไม่ผ่าน
หากโครงสร้างตรงกันแต่เงื่อนไขกำกับเป็นเท็จ การจับคู่จะดำเนินต่อไปยังกรณีถัดไปแทนที่จะหยุด
value = 5
match value:
case n if n > 100:
print('big')
case n:
print('fell through to here:', n)เงื่อนไขกำกับกับรูปแบบคลาส
เงื่อนไขกำกับสามารถใช้ร่วมกับรูปแบบทุกชนิด รวมถึงรูปแบบคลาส เพื่อกำหนดเงื่อนไขที่แม่นยำสำหรับแอตทริบิวต์ของอ็อบเจกต์
from dataclasses import dataclass
@dataclass
class Order:
total: float
def discount(order):
match order:
case Order(total=t) if t > 100:
return 'free shipping'
case Order():
return 'standard shipping'
print(discount(Order(150)))
print(discount(Order(50)))ทบทวนไวลด์การ์ด
ขีดล่างเดี่ยว _ จะจับคู่กับทุกสิ่งและไม่ผูกค่าใดไว้ เมื่อเป็นกรณีสุดท้าย จะจัดการทุกกรณีที่ยังไม่ตรงกับกรณีก่อนหน้า
x = 'unexpected'
match x:
case 'a':
print('letter a')
case _:
print('catch-all')การจับค่าเทียบกับไวลด์การ์ด
การจับค่าด้วยชื่อก็จับคู่กับทุกสิ่งเช่นกัน แต่จะเก็บค่าไว้ ส่วน _ จะทิ้งค่า ใช้ชื่อเมื่อคุณต้องการค่าไปใช้ในเนื้อหาของกรณี
value = 42
match value:
case 0:
print('zero')
case other: # capture: keeps the value
print('value was', other)ไวลด์การ์ดภายในรูปแบบ
ขีดล่างสามารถอยู่ภายในรูปแบบขนาดใหญ่กว่าเพื่อเพิกเฉยต่อส่วนที่คุณไม่สนใจ
record = ('user', 42, 'ignore_me')
match record:
case ('user', user_id, _):
print('user id:', user_id)การรวม OR เงื่อนไขกำกับ และไวลด์การ์ด
คุณสมบัติเหล่านี้ทำงานร่วมกันได้ รูปแบบ OR ตามด้วยเงื่อนไขกำกับและไวลด์การ์ดสุดท้าย ช่วยสร้างตัวจำแนกที่สื่อความหมายได้ดี
def classify(n):
match n:
case 0 | 1:
return 'binary digit'
case x if x % 2 == 0:
return 'even'
case _:
return 'odd'
print(classify(0))
print(classify(4))
print(classify(7))ความครอบคลุมทุกกรณี
ต่างจากภาษาบางภาษา ไพธอนไม่บังคับให้การจับคู่ครอบคลุมทุกกรณี หากไม่มีกรณีใดตรงกัน คำสั่งจะไม่ทำอะไรเลย เพิ่ม case _ สุดท้ายเมื่อคุณต้องการรับประกันว่าจะมีแขนงหนึ่งทำงานเสมอ
color = 'purple'
result = 'no match'
match color:
case 'red':
result = 'stop'
case 'green':
result = 'go'
print(result)เงื่อนไขกำกับกับข้อมูลที่แยกโครงสร้างแล้ว
เงื่อนไขกำกับทำงานคู่กับรูปแบบลำดับและรูปแบบการแมปได้อย่างเป็นธรรมชาติ ทำให้คุณทดสอบค่าที่เพิ่งดึงออกมาได้
data = [10, 20]
match data:
case [a, b] if a + b > 25:
print('sum is large')
case [a, b]:
print('sum is small')ตรวจสอบความเข้าใจ
จะเกิดอะไรขึ้นเมื่อรูปแบบตรงกันในเชิงโครงสร้าง แต่เงื่อนไขกำกับเป็นเท็จ
ทบทวน
คุณได้เรียนรู้การเพิ่มเงื่อนไขและกรณีที่ครอบคลุมทุกกรณี
- เงื่อนไขกำกับเพิ่มการทดสอบด้วย
ifซึ่งสามารถใช้ชื่อที่จับค่าไว้ได้ - เมื่อเงื่อนไขกำกับไม่ผ่าน ระบบจะไปยังกรณีถัดไป
_จะจับคู่แล้วทิ้งค่า ส่วนชื่อจะจับค่าไว้- เพิ่ม
case _สุดท้ายเพื่อให้มีแขนงทำงานอย่างแน่นอน
คำถามที่พบบ่อย
บทเรียน “การ์ดและไวลด์การ์ด” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การ์ดและไวลด์การ์ด” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Python Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การ์ดและไวลด์การ์ด”
เพิ่มเงื่อนไขและกรณีครอบคลุมทั้งหมด คุณปฏิบัติ Python Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Python Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Python Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “การ์ดและไวลด์การ์ด” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Python Academy นี้ได้ไหม
ได้ บทเรียน Python Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- พื้นฐาน match และ case
- การจับคู่ลำดับและแมป
- รูปแบบคลาส
- การ์ดและไวลด์การ์ด