Enum là một lớp trong python để tạo các bảng 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. Một enum có các đặc điểm sau
Các enums là biểu diễn chuỗi có thể đánh giá được của một đối tượng còn được gọi là repr[]
Tên của enum được hiển thị bằng từ khóa 'tên'
Sử dụng type[] chúng ta có thể kiểm tra các loại enum
Ví dụ
import enum # Using enum class create enumerations class Days[enum.Enum]: Sun = 1 Mon = 2 Tue = 3 # print the enum member as a string print ["The enum member as a string is : ",end=""] print [Days.Mon] # print the enum member as a repr print ["he enum member as a repr is : ",end=""] print [repr[Days.Sun]] # Check type of enum member print ["The type of enum member is : ",end =""] print [type[Days.Mon]] # print name of enum member print ["The name of enum member is : ",end =""] print [Days.Tue.name]
đầu ra
Chạy đoạn mã trên cho chúng ta kết quả sau -
The enum member as a string is : Days.Mon he enum member as a repr is : The type of enum member is : The name of enum member is : Tue
In enum dưới dạng có thể lặp lại
Chúng ta có thể in enum dưới dạng danh sách có thể lặp lại. Trong đoạn mã dưới đây, chúng tôi sử dụng vòng lặp for để in tất cả các thành viên enum
Ví dụ
import enum # Using enum class create enumerations class Days[enum.Enum]: Sun = 1 Mon = 2 Tue = 3 # printing all enum members using loop print ["The enum members are : "] for weekday in [Days]: print[weekday]
đầu ra
Chạy đoạn mã trên cho chúng ta kết quả sau -
The enum members are : Days.Sun Days.Mon Days.Tue
Băm enums
Các thành viên trong Bảng liệt kê có thể băm được, do đó chúng có thể được sử dụng trong từ điển và bộ. trong ví dụ dưới đây, chúng tôi thấy quá trình băm đang hoạt động và kiểm tra xem quá trình băm có thành công không
Ví dụ
import enum # Using enum class create enumerations class Days[enum.Enum]: Sun = 1 Mon = 2 # Hashing to create a dictionary Daytype = {} Daytype[Days.Sun] = 'Sun God' Daytype[Days.Mon] = 'Moon God' # Checkign if the hashing is successful print[Daytype =={Days.Sun:'Sun God',Days.Mon:'Moon God'}]
đầu ra
Chạy đoạn mã trên cho chúng ta kết quả sau -
True
Truy cập enum
Chúng tôi có thể truy cập các thành viên enum bằng cách sử dụng tên hoặc giá trị của các mục thành viên. Trong ví dụ dưới đây, trước tiên chúng tôi truy cập giá trị theo tên nơi chúng tôi sử dụng tên của enu làm chỉ mục
Python 3 đã xuất hiện được một thời gian và hầu hết các nhà phát triển - đặc biệt là những người lần đầu tiên chọn lập trình - đã sử dụng nó. Nhưng trong khi có rất nhiều tính năng mới xuất hiện với Python 3, có vẻ như nhiều tính năng trong số đó chưa được biết đến hoặc chưa được sử dụng đúng mức. Trong bài viết hôm nay, tôi sẽ nói về ba tính năng ít được biết đến nhưng rất hữu ích. Chúng là những tính năng mà tôi đã biết và yêu thích ở các ngôn ngữ khác mà tôi thực sự nghĩ làm cho Python 3 trở nên tuyệt vời
phép liệt kê
Enums là thứ tôi đã sử dụng rất nhiều trong Java và Swift và việc tôi sử dụng chúng đã mở rộng sang Python
Khai báo một enum trong Python rất dễ dàng và cũng có thể được thực hiện trước Python 3 [mặc dù có nhiều chức năng hạn chế hơn]
Trong đoạn mã trên, bạn có thể thấy một enum được khai báo dễ dàng bằng cách khai báo một lớp và biến nó thành một lớp con của Enum
. Từ đó, bạn chỉ cần xác định từng trạng thái của mình trong các dòng sau
Trong trường hợp của tôi, tôi đã có sẵn AIR
, LAND
và SEA
Chức năng đã được thêm vào trong Python 3 là khả năng thực hiện
The enum member as a string is : Days.Mon he enum member as a repr is : The type of enum member is : The name of enum member is : Tue0 và
The enum member as a string is : Days.Mon he enum member as a repr is : The type of enum member is : The name of enum member is : Tue1. Những thứ đó sẽ cho phép bạn lấy giá trị số nguyên được liên kết với trạng thái hoặc chuỗi được liên kết với nó
Trong đoạn mã trên, in
The enum member as a string is : Days.Mon he enum member as a repr is : The type of enum member is : The name of enum member is : Tue2 sẽ trả về
LAND
, vì vậy chức năng không chỉ là một số nguyênEnums hữu ích trong mã khi bạn muốn biểu diễn mô tả các hằng số. Ví dụ: thay vì kiểm tra xem một tiểu bang là
The enum member as a string is : Days.Mon he enum member as a repr is : The type of enum member is : The name of enum member is : Tue4 hay
The enum member as a string is : Days.Mon he enum member as a repr is : The type of enum member is : The name of enum member is : Tue5, tốt hơn hết là kiểm tra xem đó là
AIR
0 hay AIR
1. Các hằng số của bạn có thể thay đổi và nếu ai đó đang xem mã của bạn, thì AIR
2 có ý nghĩa hơn nhiều so với The enum member as a string is : Days.Mon he enum member as a repr is : The type of enum member is : The name of enum member is : Tue4. Kết quả là, khả năng đọc được cải thiện rất nhiều
Để đọc thêm, hãy xem tài liệu Python 3 chính thức trên Enum
tại đây
Định dạng
Đã thêm vào Python 3. 6, AIR
5 là một cách tuyệt vời để định dạng văn bản. Chúng cung cấp khả năng đọc tốt hơn nhiều và ít bị lỗi hơn [điều mà tôi chắc chắn thích, đến từ các ngôn ngữ như Java]
AIR
5 là một cách dễ đọc hơn so với AIR
7 được sử dụng trước đây trong Python. Đây là một ví dụ về việc sử dụng AIR
7
Như bạn có thể thấy, chúng tôi có các dấu ngoặc trống thông qua chuỗi và sau đó, chúng tôi liệt kê tên của từng biến theo thứ tự
Bây giờ, hãy sử dụng cùng một mã nhưng sử dụng AIR
9, nó dễ đọc hơn nhiều và rất giống với định dạng chuỗi trong Swift
Để thực hiện chuỗi sạch hơn này, chúng tôi chỉ cần mở đầu các trích dẫn của mình bằng chữ cái LAND
0 và sau đó thay vì có các dấu ngoặc trống, chúng tôi đặt biến hoặc dữ liệu trực tiếp vào các dấu ngoặc đơn. Vì chính các biến được viết trong ngoặc nên bạn không cần phải đếm số mục được viết theo định dạng để tìm ra biến nào được đặt ở đâu — các biến tồn tại ngay tại nơi chúng sẽ được đặt
Thực hiện AIR
5 tạo ra mã dễ đọc và đáng tin cậy hơn nhiều so với thực hiện điều gì đó như nối chuỗi hoặc định dạng chuỗi
Lớp dữ liệu
Các lớp dữ liệu có thể là một chủ đề khó hiểu hơn so với các chủ đề khác mà tôi đã đề cập, vì vậy tôi sẽ giải thích ngắn gọn về chúng. Các lớp dữ liệu là thứ mà tôi thực sự thích trong Kotlin, vì vậy tôi cũng thực sự muốn thử sử dụng chúng trong Python
Một lớp dữ liệu thực sự là một lớp có mục đích duy nhất là giữ dữ liệu theo nghĩa đen. Lớp sẽ có các biến có thể được truy cập và ghi vào, nhưng không có logic bổ sung nào ở trên nó
Hãy tưởng tượng bạn có một chương trình và bạn chuyển một chuỗi và một dãy số giữa các lớp khác nhau. Bạn chỉ có thể có các phương thức như LAND
2, nhưng cách tiếp cận tốt hơn nhiều là tạo một lớp dữ liệu chỉ chứa một chuỗi dưới dạng một trường và một mảng
Bằng cách tạo một lớp dữ liệu, những gì bạn đang làm sẽ rõ ràng hơn nhiều và việc kiểm tra đơn vị cũng sẽ dễ dàng hơn
Tôi sẽ đưa ra một ví dụ về cách tạo một lớp dữ liệu đơn giản biểu diễn một vectơ ba chiều, nhưng điều này có thể dễ dàng được mở rộng để biểu diễn bất kỳ sự kết hợp nào của các dữ liệu khác nhau
Ở đây, bạn có thể thấy định nghĩa của một lớp dữ liệu rất giống với khai báo một lớp bình thường, ngoại trừ chúng ta sử dụng LAND
3 trước nó và sau đó mỗi trường được khai báo như LAND
4
Mặc dù chức năng của LAND
5 do chúng tôi tạo ra bị hạn chế, mục đích của lớp dữ liệu chỉ là tăng hiệu quả và giảm lỗi trong mã của bạn. Sẽ tốt hơn nhiều nếu chuyển khoảng một biến LAND
5 hơn là biến LAND
7
Để biết thêm chi tiết về LAND
3, hãy xem tài liệu Python 3 chính thức tại đây
Phần kết luận
Nếu bạn đã thử bất kỳ tính năng mới nào trong số này, hãy cho tôi biết trong phần nhận xét. Tôi muốn nghe các trường hợp sử dụng khác nhau của bạn dành cho họ. Mã hóa vui vẻ