
5 khái niệm Python phải biết
Trong bài viết này, chúng ta sẽ khám phá năm khái niệm cơ bản mà mọi nhà phát triển Python nên có trong bộ công cụ của họ.
-->
5 khái niệm Python phải biết - KDnuggets
-->
Blog
Bài viết hàng đầu
Giới thiệu
chủ đề
trí tuệ nhân tạo
Lời khuyên nghề nghiệp
Thị giác máy tính
Kỹ thuật dữ liệu
Khoa học dữ liệu
Mô hình ngôn ngữ
Học máy
MLOps
NLP
Lập trình
Python
SQL
Bộ dữ liệu
Sự kiện
Tài nguyên
Bảng cheat
Khuyến nghị
Tóm tắt công nghệ
Quảng cáo
Tham gia bản tin
5 khái niệm Python phải biết
Trong bài viết này, chúng ta sẽ khám phá năm khái niệm cơ bản mà mọi nhà phát triển Python nên có trong bộ công cụ của họ.
Bởi Matthew Mayo, Tổng biên tập KDnuggets vào ngày 15 tháng 5 năm 2026 bằng Python
-->
#Giới thiệu
Tại sao bạn sử dụng Python? Đối với nhiều người, điều đó có nghĩa là "chỉ vì", nhưng thực sự không nên như vậy. Python là ngôn ngữ lập trình đa năng, mạnh mẽ với cú pháp đơn giản được làm nổi bật bởi các phương pháp Pythonic để quản lý logic và dữ liệu, ngôn ngữ này tình cờ trở thành ngôn ngữ phù hợp của khoa học dữ liệu, học máy và AI chính xác vì những lý do này. Thật dễ dàng để học Python, nhưng bạn có thể dành nhiều năm làm việc để cải thiện kỹ năng của mình và nắm vững các cơ chế cốt lõi của ngôn ngữ, nỗ lực chuyển đổi từ người mới bắt đầu sang chuyên gia có khả năng viết các hệ thống hiệu quả, có thể bảo trì.
Với suy nghĩ này, hôm nay chúng ta sẽ khám phá năm khái niệm cơ bản mà mọi nhà phát triển Python nên có trong bộ công cụ của họ.
# 1. Hiểu danh sách và biểu thức tạo
Python nổi tiếng vì tính dễ đọc của nó. Khả năng hiểu danh sách cho phép bạn thay thế các vòng lặp rườm rà bằng một dòng mã. Tuy nhiên, bước đi chuyên nghiệp thực sự ở đây là biết khi nào nên sử dụng biểu thức trình tạo để tiết kiệm bộ nhớ.
// Cách làm vụng về (Vòng lặp For)
Hãy bắt đầu với cách làm việc "cẩu thả" không hiệu quả, không phải Pythonic:
số = phạm vi (1000000)
danh sách bình phương = []
cho n bằng số:
nếu n% 2 == 0:
Squared_list.append(n ** 2)
// Cách Pythonic (Hiểu danh sách)
Bây giờ chúng ta hãy xem cách Pythonic để giải quyết nhiệm vụ tương tự:
# Thực hiện ngắn gọn và nhanh hơn
Squared_list = [n ** 2 cho n về số nếu n % 2 == 0]
# Vòng xoắn "Phải biết": Biểu thức tạo
# Nếu bạn chỉ cần lặp lại một lần và không cần toàn bộ danh sách trong bộ nhớ:
Squared_gen = (n ** 2 cho n trong số nếu n % 2 == 0)
Đầu ra:
Kích thước danh sách: 4.167.352 byte
Kích thước trình tạo: 200 byte
Đây là lý do tại sao điều này lại quan trọng, ngoài việc mọi người nói với bạn "đó là cách nó được thực hiện trong Python": Khả năng hiểu danh sách nhanh hơn .append(). Các biểu thức của trình tạo (sử dụng dấu ngoặc đơn) là "lười" — chúng tạo ra từng mục một, cho phép bạn xử lý các tập dữ liệu lớn mà không làm cạn kiệt bộ nhớ hệ thống của bạn.
Hãy xem cách sử dụng trình tạo, mỗi lần gọi một lệnh, sử dụng biểu thức trình tạo:
số = phạm vi (1000000)
Squared_gen = (n ** 2 cho n trong số nếu n % 2 == 0)
# Các giá trị chỉ được tính khi được yêu cầu, không phải tất cả cùng một lúc
in(tiếp theo(squared_gen))
in(tiếp theo(squared_gen))
in(tiếp theo(squared_gen))
Đầu ra:
0
4
16
#2. Người trang trí
Trình trang trí là một cách để sửa đổi hành vi của một hàm hoặc lớp mà không thay đổi vĩnh viễn mã nguồn của nó. Hãy coi chúng như những lớp bao bọc xung quanh các chức năng khác.
// Con đường vụng về
Nếu bạn muốn ghi lại thời gian chạy của một số chức năng khác nhau, bạn có thể thêm mã thời gian vào từng chức năng theo cách thủ công.
thời gian nhập khẩu
def process_data():
bắt đầu = thời gian.time()
# ... logic hàm ...
kết thúc = thời gian.time()
print(f"process_data mất {end - start:.4f}s")
chắc chắn train_model():
bắt đầu = thời gian.time()
# ... logic hàm ...
kết thúc = thời gian.time()
print(f"train_model mất {end - start:.4f}s")
def tạo_report():
bắt đầu = thời gian.time()
# ... logic hàm ...
kết thúc = thời gian.time()
print(f"generate_report mất {end - start:.4f}s")
Lưu ý rằng sự lặp lại làm cho vấn đề trở nên rõ ràng: bốn dòng giống nhau được lặp lại trong mọi chức năng. Hãy xem chức năng trang trí có thể khắc phục điều này như thế nào.
// Con đường Pythonic
Đây là một cách tiếp cận Pythonic hơn cho nhiệm vụ này.
thời gian nhập khẩu
từ gói nhập khẩu functools
def hẹn giờ_trang trí (func):
@wraps(func)
trình bao bọc def(*args, **kwargs):
bắt đầu = thời gian.time()
kết quả = func(*args, **kwargs)
kết thúc = thời gian.time()
print(f"{func.__name__} mất {end - start:.4f}s")
kết quả trả về
giấy gói trả lại
@timer_trang trí
def Heavy_computation():
tổng trả về(phạm vi(10**7))
tính toán nặng ()
Đầu ra:
tính toán nặng mất 0,0941 giây
Xem cách time_designator() "bọc" hàm Heavy_computation() và khi hàm sau được gọi, nó sẽ được gộp vào và trải nghiệm các lợi ích của hàm trước.
Trình trang trí thúc đẩy nguyên tắc "không lặp lại chính mình (DRY). Chúng rất cần thiết cho việc ghi nhật ký, xác thực và lưu vào bộ nhớ đệm trong môi trường sản xuất.
# 3. Trình quản lý bối cảnh (có câu lệnh)
Quản lý các tài nguyên như tệp, kết nối cơ sở dữ liệu hoặc ổ cắm mạng là nguồn lỗi phổ biến. Nếu bạn quên đóng tệp, bạn sẽ bị rò rỉ bộ nhớ hoặc khóa tệp khỏi các quy trình khác.
// Con đường vụng về
Ở đây, chúng tôi mở một tệp, sử dụng nó và buộc đóng khi không còn cần thiết.
f = open("data.txt", "w")
thử:
f.write("Xin chào thế giới")
cuối cùng:
# Dễ quên!
f.close()
// Con đường Pythonic
Một tuyên bố with sẽ giúp chúng tôi giải quyết vấn đề trên.
# File tự động đóng ở đây ngay cả khi xảy ra lỗi
với open("data.txt", "w") là f:
f.write("Xin chào thế giới")
Nó không chỉ ngắn gọn hơn mà logic còn đơn giản hơn và dễ theo dõi hơn — ngoài ra bạn còn nhận được close() dễ bị quên miễn phí, vì quá trình "thiết lập" và "phân tách" diễn ra một cách đáng tin cậy. Về tác vụ dữ liệu, điều này rất hữu ích khi kết nối với cơ sở dữ liệu SQL hoặc xử lý các tác vụ liên quan đến đầu vào/đầu ra (IO) lớn.
# 4. Làm chủ *args và **kwargs
Đôi khi bạn không biết có bao nhiêu đối số sẽ được truyền vào một hàm. Python xử lý việc này một cách khéo léo bằng cách sử dụng
Nguồn tin: KDnuggets — Tác giả: Matthew Mayo. Bản dịch tiếng Việt do AI thực hiện, có thể có sai sót.