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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- คลาส Enum
- IntEnum และ Flag
- พื้นฐาน NamedTuple
- typing.NamedTuple