Bài đăng này sẽ khám phá mô-đun Python enum, một công cụ mạnh mẽ để xử lý các tập dữ liệu không thay đổi Show
Đây không chỉ là phần không thể thiếu để phát triển phần mềm tổng quát mà còn là thứ bạn sẽ thấy thường thấy trong các trò chơi – biến nó thành một kỹ năng và nền tảng quan trọng để học bất kể mục tiêu mã hóa cá nhân của bạn là gì. Hãy đi sâu vào và khám phá chủ đề hấp dẫn này về cách sử dụng enum trong Python Điều kiện tiên quyết. Người đọc phải có kiến thức làm việc về ngôn ngữ lập trình Python. Làm quen với cách viết các lớp cũng sẽ hữu ích vì các enum Python được triển khai dưới dạng các lớp Python. Mục lục
Python Enum là gì?Hãy thảo luận về Python enum là gì. Viết tắt của kiểu liệt kê, tính năng ngôn ngữ này xác định một tập hợp các tên được liên kết với các giá trị không đổi như số, chuỗi, v.v. Các enum Python rất hữu ích để biểu diễn dữ liệu đại diện cho một tập hợp trạng thái hữu hạn, chẳng hạn như ngày trong tuần, tháng trong năm, v.v. Chúng đã được thêm vào Python 3. 4 qua PEP 435. Tuy nhiên, nó có sẵn tất cả các cách trở lại 2. 4 qua pypy. Như vậy, bạn có thể mong đợi chúng trở thành một yếu tố chính khi bạn khám phá lập trình Python Ví dụ đơn giảnChúng tôi định nghĩa một lớp enum đơn giản (i. e. một lớp bắt nguồn từ Enum) chứa các tháng trong năm. Mỗi tháng (tôi. e. thành viên enum) được gán một hằng số duy nhất from enum import Enum, unique, Flag class Months(Enum) : JANUARY=1 FEBRUARY=2 MARCH = 3 APRIL=4 MAY=5 JUNE=6 JULY=7 AUGUST=8 SEPTEMBER=9 OCTOBER=10 NOVEMBER=11 DECEMBER=12 In ra các thành viên của Python enumCó một số cách chúng ta có thể làm điều này # by numerical index print (Months(7) Months.JULY # item index print (Months['JULY']) Months.JULY # by name print (Months.JULY) Months.JULY # by name print (Months.JULY.name) JULY # by value print (Months.JULY.value) JULY Đảm bảo tính duy nhấtThêm một trình trang trí @unique vào lớp, đảm bảo rằng các phần tử trùng lặp không tồn tại trong Python enum from enum import Enum, unique, Flag >> @unique .. class Months(Enum) : .. JANUARY=1 .. JANUARY=1 .. FEBRUARY=2 .. MARCH = 3 .. APRIL=4 .. MAY=5 .. JUNE=6 .. JULY=7 .. AUGUST=8 .. SEPTEMBER=9 .. OCTOBER=10 .. NOVEMBER=11 .. DECEMBER=12 .. Traceback (most recent call last): File "<stdin>", line 2, in <module> File "<stdin>", line 4, in Months File "/home/raghavan/anaconda3/lib/python3.8/enum.py", line 112, in __setitem__ raise TypeError('Attempted to reuse key: %r' % key) TypeError: Attempted to reuse key: 'JANUARY' TypeError xảy ra khi trình thông dịch Python cố tạo Python enum này Cách khác để tạo EnumLớp Python Enum có thể gọi được và API chức năng sau có thể được gọi để tạo nó >> quarter1= Enum('Q1', [('January', 1), ('February', 2), ('March', 3)]) >> print (quarter1(3)) Q1.March # can also be written as >> quarter1= Enum('Q1', ('January February March')) >> print (quarter1) <enum 'Q1'> # item access >>> quarter1['January'] <Q1.January: 1> >>> Quarter1.March <Q1.March: 3> >>> Quarter1.March.value 3 Lặp lại các phần tửcho vòng lặpCó thể sử dụng vòng lặp for đơn giản để in ra các phần tử. # simple for loop for month in (Months) : print (month) Months.JANUARY Months.FEBRUARY Months.MARCH Months.APRIL Months.MAY Months.JUNE Months.JULY Months.AUGUST Months.SEPTEMBER Months.OCTOBER Months.NOVEMBER Months.DECEMBER Thuộc tính __members__ attribute__members__ là thuộc tính cấp lớp chỉ đọc cung cấp ánh xạ từ tên đến thành viên. Nó có thể được lặp đi lặp lại để tạo ra một đầu ra tương tự như trên # iteration over elements for name, member in Months.__members__.items(): print (name, member) JANUARY Months.JANUARY FEBRUARY Months.FEBRUARY MARCH Months.MARCH APRIL Months.APRIL MAY Months.MAY JUNE Months.JUNE JULY Months.JULY AUGUST Months.AUGUST SEPTEMBER Months.SEPTEMBER OCTOBER Months.OCTOBER NOVEMBER Months.NOVEMBER DECEMBER Months.DECEMBER bămPython enums có thể được sử dụng làm khóa từ điển như sau >> months = {} >> months[Months.JULY] = 'Many Birthdays' >> months[Months.JANUARY] = 'First Month of the Year' >> print (months[Months(7)]) Many Birthdays Giá trị tự độngCác giá trị tương ứng với tên có thể được điền tự động bằng cách sử dụng auto() như minh họa bên dưới. # member values using auto from enum import auto class Quarter(Enum): Q1 = auto() Q2 = auto() Q3 = auto() Q4 = auto() for qtr in Quarter: print (qtr.value) # Output 1 2 3 4 Các giá trị, theo mặc định, là số. Tuy nhiên, chúng có thể được chuyển đổi thành các giá trị chuỗi bằng cách ghi đè _generate_next_value_ trong lớp ________số 8Bảng liệt kê có nguồn gốcLá cờFlag khá giống với Enum ngoại trừ nó có hỗ trợ cho các hoạt động bitwise (. , &, ^, ~). Các toán tử này có thể được sử dụng để kết hợp nhiều phần tử enum Python thành một mặt nạ Lớp Hành tinh có nguồn gốc từ Flag và chứa 8 hành tinh hiện được Liên minh Thiên văn Quốc tế công nhận. Các giá trị của các phần tử được yêu cầu là bội số của hai trong khi các kết hợp không cần tuân theo hạn chế đó class Planets(Flag): MERCURY = 1 VENUS = 2 EARTH = 4 MARS = 8 SATURN = 10 URANUS = 12 NEPTUNE = 14 my_planet = { Planets.MERCURY: "Red Planet", Planets.EARTH: "People !!!!!", Planets.MARS: "Martians !!!!" } # bitwise OR mask => Mercury / Earth. mercury_earth = Planets.MERCURY|Planets.EARTH # we check which planets in the given dictionary are # MARS or EARTH by doing a Bitwise AND with the mask above. for planet_name in myplanet.keys() : found = bool(planet_name & mercury_earth) print ("Found:" + str(planet_name) + ":" + str(found)) # Output Found:Planets.MERCURY:True Found:Planets.EARTH:True Found:Planets.MARS:False
IntEnumIntEnum là một Python enum dẫn xuất cũng bắt nguồn từ int. Do đó, nó hỗ trợ các hoạt động int. Nó cung cấp các phép so sánh có thứ tự mà lớp Python Enum không cung cấp # by numerical index print (Months(7) Months.JULY # item index print (Months['JULY']) Months.JULY # by name print (Months.JULY) Months.JULY # by name print (Months.JULY.name) JULY # by value print (Months.JULY.value) JULY0
cờ quốc tếBiến thể này của enum là một lớp con của int. Các thành viên của Python enum này là ints. Các giá trị này có thể được kết hợp bằng cách sử dụng toán tử bitwise và kết quả cũng là thành viên IntFlag. Bất kỳ nhà khai thác nào khác được sử dụng trên các thành viên đều có thể xóa chúng khỏi tư cách thành viên IntFlag # by numerical index print (Months(7) Months.JULY # item index print (Months['JULY']) Months.JULY # by name print (Months.JULY) Months.JULY # by name print (Months.JULY.name) JULY # by value print (Months.JULY.value) JULY1
Đặt hàng tùy chỉnhCả IntEnum và IntFlag đều cho phép chúng tôi sắp xếp thứ tự tùy chỉnh của các thành viên khi thứ tự tự nhiên không giúp được gì IntEnum # by numerical index print (Months(7) Months.JULY # item index print (Months['JULY']) Months.JULY # by name print (Months.JULY) Months.JULY # by name print (Months.JULY.name) JULY # by value print (Months.JULY.value) JULY2
Tài liệu tham khảo / Đọc thêmChúng tôi đã đề cập đến những điều cơ bản, nhưng bây giờ là lúc để bạn tự mình khám phá Python enums. Kiểm tra một số liên kết bên dưới để bắt đầu, với enums hoặc với các chủ đề lập trình Python khác
Sự kết luậnPython enums cực kỳ hữu ích trong việc quản lý dữ liệu có một tập hợp trạng thái hữu hạn. Chúng cũng hữu ích trong việc áp đặt thứ tự tùy chỉnh trên dữ liệu. Như đã thảo luận, có 3 biến thể của Python Enum i. e. IntEnum, IntFlag và Cờ. Flag và IntFlag có thể được sử dụng để kết hợp các trạng thái bằng toán tử bitwise, trong khi IntEnum và IntFlag hữu ích cho việc so sánh và sắp xếp số Tuy nhiên, bạn đi đâu với kiến thức mới tìm thấy này là tùy thuộc vào bạn. Có lẽ bạn quan tâm đến việc tạo một chương trình lịch phù hợp với bộ phần mềm kinh doanh. Hoặc, có thể bạn quan tâm đến việc tạo trò chơi và sử dụng phép liệt kê trong Python cho các hiệu ứng trạng thái khác nhau. Việc sử dụng ở đây là vô hạn, nhưng chúng tôi hy vọng bạn đã có một số thông tin mới theo ý của mình và có thể sử dụng Python enum để mang lại lợi ích và thành công cho bạn Sự khác biệt giữa enum và từ điển là gì?Tóm tắt. enums dùng để liệt kê những thứ để bạn có thể sử dụng để xác định chúng sau này. Từ điển được sử dụng để lưu trữ các giá trị (đối tượng hoặc biến) dựa trên khóa .
Có phải enum là từ điển trong Python không?Enum là một lớp trong python để tạo kiểu liệt kê , là một tập hợp các tên tượng trưng (thành viên) được liên kết với các giá trị không đổi, duy nhất. Các thành viên của một phép liệt kê có thể được so sánh bằng các anme tượng trưng này và bản thân phép liệt kê có thể được lặp đi lặp lại.
Là enum tương tự như từ điển?Python Enum vs Dictionary Enum được sử dụng để tạo một tập hợp các hằng số liên quan. Từ điển được sử dụng để lưu trữ các giá trị dữ liệu trong khóa. cặp giá trị. Enum giống với mảng hơn . Từ điển không cho phép trùng lặp.
Tôi có nên sử dụng enums trong Python không?Python enums hữu ích để biểu thị dữ liệu đại diện cho một tập hợp trạng thái hữu hạn chẳng hạn như ngày trong tuần, tháng trong năm, v.v. Chúng đã được thêm vào Python 3. 4 qua PEP 435. Tuy nhiên, nó có sẵn tất cả các cách trở lại 2. 4 qua pypy. Như vậy, bạn có thể mong đợi chúng trở thành một yếu tố chính khi bạn khám phá lập trình Python. |