0Pricing
Python Academy · บทเรียน

IntEnum และ Flag

ใช้งาน enum จำนวนเต็มและ enum แบบแฟล็ก

IntEnum และ Flag เป็นบทเรียน Python Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Python Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน

นอกเหนือจากการแจกแจงทั่วไป

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

Enum ทั่วไปไม่ใช่จำนวนเต็ม

สมาชิกของ Enum ทั่วไปไม่สามารถใช้แทนค่าจำนวนเต็มของตนเองได้ การเปรียบเทียบกับตัวเลขจะให้ผลเป็น False

from enum import Enum

class Level(Enum):
    LOW = 1
    HIGH = 2

print(Level.LOW == 1)

IntEnum เปรียบเทียบเหมือนจำนวนเต็ม

สมาชิกของ IntEnum เป็นจำนวนเต็ม จึงเปรียบเทียบแล้วเท่ากับค่าตัวเลขของตนเอง และรองรับการจัดลำดับ

from enum import IntEnum

class Level(IntEnum):
    LOW = 1
    HIGH = 2

print(Level.LOW == 1)
print(Level.LOW < Level.HIGH)

IntEnum ในการคำนวณ

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

from enum import IntEnum

class Priority(IntEnum):
    LOW = 1
    MEDIUM = 5
    HIGH = 10

print(Priority.HIGH + 1)
print(Priority.MEDIUM * 2)

การเรียงลำดับสมาชิก IntEnum

เนื่องจาก IntEnum รองรับการจัดลำดับ รายการสมาชิกจึงเรียงตามค่าได้โดยไม่ต้องใช้ฟังก์ชันคีย์เพิ่มเติม

from enum import IntEnum

class Priority(IntEnum):
    LOW = 1
    MEDIUM = 5
    HIGH = 10

for p in sorted([Priority.HIGH, Priority.LOW, Priority.MEDIUM]):
    print(p.name)

Flag สำหรับตัวเลือกที่รวมกันได้

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

from enum import Flag, auto

class Permission(Flag):
    READ = auto()
    WRITE = auto()
    EXECUTE = auto()

print(Permission.READ)
print(Permission.READ.value)

การรวม Flag ด้วย |

ใช้ตัวดำเนินการ OR ระดับบิต | เพื่อรวมแฟล็กเป็นค่าแบบประกอบหนึ่งค่า

from enum import Flag, auto

class Permission(Flag):
    READ = auto()
    WRITE = auto()
    EXECUTE = auto()

access = Permission.READ | Permission.WRITE
print(access)

การทดสอบสมาชิกด้วย in

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

from enum import Flag, auto

class Permission(Flag):
    READ = auto()
    WRITE = auto()
    EXECUTE = auto()

access = Permission.READ | Permission.WRITE
print(Permission.READ in access)
print(Permission.EXECUTE in access)

การหาส่วนร่วมและการนำออก

รวมแฟล็กด้วย & (AND) เพื่อค้นหาบิตที่ตรงกัน และนำแฟล็กออกด้วย & ร่วมกับส่วนเติมเต็ม ~

from enum import Flag, auto

class Permission(Flag):
    READ = auto()
    WRITE = auto()
    EXECUTE = auto()

access = Permission.READ | Permission.WRITE
still = access & ~Permission.WRITE
print(still)

IntFlag สำหรับแฟล็กจำนวนเต็ม

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

from enum import IntFlag, auto

class Mode(IntFlag):
    R = 4
    W = 2
    X = 1

m = Mode.R | Mode.W
print(int(m))

การวนซ้ำแฟล็กแบบรวม

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

from enum import Flag, auto

class Permission(Flag):
    READ = auto()
    WRITE = auto()
    EXECUTE = auto()

access = Permission.READ | Permission.EXECUTE
for p in access:
    print(p.name)

ตรวจสอบอย่างรวดเร็ว

เหตุใดคุณจึงเลือกการแจกแจงแบบ Flag แทนการแจกแจงแบบ Enum ทั่วไป

สรุปทบทวน

คุณได้เรียนรู้การแจกแจงแบบจำนวนเต็มและแบบแฟล็ก

  • สมาชิกของ IntEnum ทำงานเหมือนจำนวนเต็มและรองรับการจัดลำดับกับการคำนวณ
  • สมาชิกของ Flag รวมกันได้ด้วย |, &, ~ และทดสอบด้วย in
  • IntFlag ผสานพฤติกรรมทั้งสองแบบ
  • ใช้กำลังของสองเป็นค่าแฟล็ก

คำถามที่พบบ่อย

บทเรียน “IntEnum และ Flag” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “IntEnum และ Flag” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Python Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “IntEnum และ Flag”

ใช้งาน enum จำนวนเต็มและ enum แบบแฟล็ก คุณปฏิบัติ Python Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Python Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Python Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “IntEnum และ Flag” ใช้เวลานานแค่ไหน

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

ฉันเขียนและรันโค้ดในบทเรียน Python Academy นี้ได้ไหม

ได้ บทเรียน Python Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. คลาส Enum
  2. IntEnum และ Flag
  3. พื้นฐาน NamedTuple
  4. typing.NamedTuple
← กลับไปที่ Python Academy