Trong Python, có thể bạn sẽ sử dụng một bộ để khởi tạo một chuỗi không được sửa đổi ở bất kỳ đâu trong chương trình. Điều này là do các bộ dữ liệu là bất biến.
Tuy nhiên, việc sử dụng một bộ có thể làm giảm khả năng đọc mã của bạn vì bạn không thể mô tả ý nghĩa của từng mục trong bộ. Đây là nơi NamedTuples có thể hữu ích.
NamedTuple cung cấp tính bất biến của một bộ, đồng thời làm cho mã của bạn dễ hiểu và dễ sử dụng.
Trong hướng dẫn này, bạn sẽ học cách tạo và sử dụng NamedTuples một cách hiệu quả.
Python Tuples – Tóm tắt nhanh
Trước khi chuyển sang NamedTuples, hãy nhanh chóng xem lại các bộ dữ liệu Python.
Tuples là cấu trúc dữ liệu tích hợp mạnh mẽ trong Python. Chúng tương tự như danh sách Python ở chỗ chúng có thể chứa các mục thuộc các loại khác nhau và ở chỗ bạn có thể cắt qua chúng.
Tuy nhiên, bộ dữ liệu khác với danh sách ở chỗ chúng bất biến. Nó nghĩa là bạn không thể sửa đổi một bộ dữ liệu hiện có và cố gắng làm như vậy sẽ gây ra lỗi.
▶ Giả sử hôm nay bạn tạo bộ dữ liệu sau. tuple house
chứa năm mục mô tả ngôi nhà, cụ thể là thành phố, quốc gia, năm xây dựng, diện tích tính bằng ft vuông và số phòng mà ngôi nhà có. Điều này được hiển thị trong đoạn mã dưới đây:
house = ("Bangalore","India",2020,2018,4)
- Cái này
house
được đặt tại thành phố Bangalore ở Ấn Độ. - Nó được xây dựng vào năm
2020
. - Và nó đã
4
các phòng chung trải rộng trên một diện tích2018
ft vuông
Giả sử bạn của bạn đọc dòng mã này hoặc bạn quay lại sau một tuần và đọc lại mã của mình. Cho rằng bạn chưa thêm bất kỳ nhận xét nào về giá trị trong bộ giá trị đại diện cho điều gì, chắc chắn có vấn đề về khả năng đọc.
Ví dụ: cuối cùng, bạn có thể phải đoán xem đó là ngôi nhà có diện tích 2018 mét vuông được xây dựng vào năm 2020 hay đó là ngôi nhà có diện tích 2020 mét vuông được xây dựng vào năm 2018. 🤔
Thay vào đó, bạn có thể đề xuất sử dụng từ điển – bạn có thể chỉ định Gì các giá trị khác nhau đại diện cho phím của từ điển và thật sự các giá trị như từ điển giá trị.
Chuyển sang phần tiếp theo để biết tóm tắt nhanh về từ điển Python.
Từ điển Python – Tóm tắt nhanh
Với động lực cải thiện khả năng đọc mã, hãy xem xét chuyển sang từ điển Python.
Từ điển là cấu trúc dữ liệu tích hợp lưu trữ giá trị trong cặp khóa-giá trị. Bạn có thể nhấn vào một từ điển và truy cập các giá trị của nó bằng các phím.
Vì vậy, bạn có thể viết lại bộ từ trước dưới dạng từ điển như sau:
house = {"city":"Bangalore","country":"India","year":2020,"area":2018,"num_rooms":4}
Trong đoạn mã trên:
"city"
,"country"
,"year"
,"area"
và"num_rooms"
là chìa khóa.- Và các giá trị từ Tuple,
"Bangalore"
,"India"
,2020
,2018
và4
được sử dụng làm giá trị tương ứng với các khóa. - Bạn có thể truy cập các giá trị bằng các phím:
house["city"]
để có được"Bangalore"
,house["area"]
để có được2018
và như thế.
Như bạn có thể thấy, việc sử dụng từ điển sẽ cải thiện khả năng đọc mã. Tuy nhiên, không giống như các bộ dữ liệu, bạn luôn có thể sửa đổi các giá trị trong từ điển.
Tất cả những gì bạn cần làm là đặt khóa tương ứng thành một giá trị khác.
Trong ví dụ trên, bạn có thể sử dụng house["city"] = "Delhi"
để thay đổi thành phố mà ngôi nhà của bạn tọa lạc. Rõ ràng, điều này là không được phép, vì bạn không muốn các giá trị được sửa đổi ở nơi khác trong chương trình.
Và nếu bạn cần lưu trữ các mô tả cho nhiều ngôi nhà như vậy, bạn sẽ phải tạo từ điển bằng số lượng ngôi nhà có, lặp lại tên của các khóa mỗi lần. Điều này cũng làm cho mã của bạn lặp đi lặp lại và không thú vị lắm!
Với NamedTuples của Python, bạn có thể có cả tính bất biến của bộ dữ liệu và khả năng đọc của từ điển.
Đi đến phần tiếp theo để tìm hiểu về NamedTuple
S.
Cú pháp Python NamedTuple
Để sử dụng một NamedTuple
bạn cần nhập nó từ mô-đun bộ sưu tập tích hợp sẵn của Python, như được hiển thị:
from collections import namedtuple
Cú pháp chung để tạo NamedTuple như sau:
namedtuple(<Name>,<[Names of Values]>)
<Name>
là trình giữ chỗ cho những gì bạn muốn gọi là NamedTuple của mình và<[Names of Values]>
là một trình giữ chỗ cho danh sách chứa tên của các giá trị hoặc thuộc tính khác nhau.
Bây giờ bạn đã quen thuộc với cú pháp tạo NamedTuples, hãy xây dựng trên house
và thử tạo nó dưới dạng NamedTuple.
Ví dụ Python NamedTuple
Như đã đề cập trước đó, bước đầu tiên là nhập namedtuple
.
from collections import namedtuple
Bây giờ, bạn có thể tạo một NamedTuple bằng cú pháp đã thảo luận trong phần trước:
House = namedtuple("House",["city","country","year","area","num_rooms"])
Trong ví dụ này,
- Bạn chọn gọi NamedTuple
House
và - Đề cập đến tên của các giá trị,
"city"
,"country"
,"year"
,"area"
và"num_rooms"
trong một danh sách.
✅ Và bạn đã tạo NamedTuple đầu tiên của mình – House
.
Bây giờ, bạn có thể tạo một ngôi nhà house_1
với các thông số kỹ thuật cần thiết bằng cách sử dụng House
như sau:
house_1 = House("Bangalore","India",2020,2018,4)
Bạn chỉ cần chuyển vào các giá trị thực mà tên hoặc thuộc tính trong <[Names of Values]>
nên lấy.
Để tạo một ngôi nhà khác, hãy nói house_2
tất cả những gì bạn cần làm là tạo một cái mới House
sử dụng các giá trị của nó.
house_2 = House("Chennai","India",2018,2050,3)
Lưu ý cách bạn có thể sử dụng
House
làm mẫu để tạo bao nhiêu ngôi nhà tùy thích mà không cần phải nhập tên của các thuộc tính mỗi khi bạn tạo một ngôi nhà mới.
Cách sử dụng dot
Ký hiệu để truy cập các giá trị của NamedTuple
Khi bạn đã tạo các đối tượng NamedTuple house_1
và house_2
bạn có thể dùng dot
ký hiệu để truy cập các giá trị của họ. Cú pháp được hiển thị dưới đây:
<namedtuple_object>.<value_name>
- Đây,
<namedtuple_object>
biểu thị đối tượng NamedTuple đã tạo. Trong ví dụ này,house_1
vàhouse_2
. <value_name>
biểu thị bất kỳ tên hợp lệ nào được sử dụng khi NamedTuple được tạo. Trong ví dụ này,"city"
,"country"
,"year"
,"area"
và"num_rooms"
là những lựa chọn hợp lệ cho<value_name>
.
Điều này được minh họa trong đoạn mã sau:
print(house_1.city)
print(house_1.country)
print(house_1.year)
print(house_1.area)
print(house_1.num_rooms)

Tương tự, bạn có thể sử dụng house_2.city
, house_2.country
v.v. để truy cập các giá trị tương ứng với NamedTuple house_2
.
📋Hãy tự mình trải nghiệm! NamedTuple Ví dụ
Trong phần này, bạn sẽ tạo một ProblemSet
Được đặt tênTuple.
Vui lòng thử ví dụ này trong bất kỳ IDE nào bạn chọn.
Các ProblemSet
NamedTuple sẽ nhận các giá trị sau:
num_questions
: một số nguyên đại diện cho số lượng câu hỏi trong một bộ vấn đề cụ thể,difficulty
: một chuỗi cho biết mức độ khó khăn của bộ vấn đề, vàtopic
: chủ đề mà tập hợp vấn đề bao trùm, chẳng hạn,"Arrays"
,"Strings"
,"Graphs"
và như thế.
Quy trình này rất giống với ví dụ trước của chúng tôi, nơi chúng tôi đã tạo House
Được đặt tênTuple.
1️⃣ Nhập khẩu namedtuple
từ collections
mô-đun.
from collections import namedtuple
2️⃣ Tạo một NamedTuple và gọi nó ProblemSet
.
ProblemSet = namedtuple("ProblemSet",["num_questions","difficulty","topic"])
3️⃣ Bây giờ bạn đã tạo ProblemSet
bạn có thể tạo bất kỳ số lượng tập hợp vấn đề nào bằng cách sử dụng ProblemSet
như khuôn mẫu.
- Đây,
problem_set1
chứa 5 câu hỏi dễ dàng trênStrings
.
problem_set1 = ProblemSet(5,"Easy","Strings")
- Và
problem_set2
chứa 3 câu hỏi khó trênBit Manipulation
.
problem_set2 = ProblemSet(3,"Hard","Bit Manipulation")
4️⃣ Cũng như ví dụ trước, bạn có thể sử dụng dot
ký hiệu để truy cập các giá trị của hai bộ vấn đề được tạo ở trên.
print(problem_set1.topic)
# Output
Strings
print(problem_set2.difficulty)
# Output
Hard
Tôi hy vọng bạn có thể hoàn thành bài tập này. 🎉
Phần kết luận
Trong hướng dẫn này, bạn đã học được:
- cách NamedTuples giúp bạn kết hợp các ưu điểm của cả bộ dữ liệu và từ điển,
- cách tạo NamedTuples và
- cách sử dụng
dot
ký hiệu để truy cập các giá trị của NamedTuples.
Nếu bạn đã quen thuộc với OOP trong Python, bạn có thể thấy điều này tương tự như cách các lớp Python hoạt động. Một lớp với các thuộc tính của nó phục vụ như một khuôn mẫu mà từ đó bạn có thể tạo bao nhiêu đối tượng hoặc thể hiện – mỗi đối tượng có các giá trị riêng cho các thuộc tính.
Tuy nhiên, việc tạo một lớp và xác định các thuộc tính bắt buộc chỉ để cải thiện khả năng đọc mã của bạn thường có thể là quá mức cần thiết và thay vào đó, việc tạo NamedTuples sẽ dễ dàng hơn rất nhiều.
Hẹn gặp lại tất cả các bạn trong bài hướng dẫn tiếp theo. Cho đến lúc đó, mã hóa vui vẻ!