Tổng hợp các Module Python “khủng” mà bạn có thể đã bỏ qua
Tác giả: Adam Goldschmidt
Python là một ngôn ngữ lập trình tuyệt vời, và nó chứa nhiều module tích hợp sẵn nhằm giúp chúng ta viết code tốt hơn, code đẹp hơn.
Mục tiêu
Thông qua bài viết này, chúng ta sẽ sử dụng một vài module và phương pháp ít ai biết mà có thể cải thiện được cách code của chúng ta cả về phần nhìn và tính hiệu quả.
NamedTuple
Tôi tin rằng một vài người hẳn đã biết tới câu lệnh phổ biến hơn là namedtuple
từ module collections
(Nếu chưa biết bạn có thể xem tại đây), nhưng kể từ phiên bản Python 3.6, một loại mới đã có trong module typing là NamedTuple
. Cả hai đều được thiết kế để giúp bạn nhanh chóng tạo ra những đối tượng bất biến có thể đọc được.
NamedTuple
thực ra là một phiên bản viết lại của namedtuple
, và theo quan điểm của tôi thì nó dễ đọc hơn nhiều:
In [2]: import typing In [3]: class BetterLookingArticle(typing.NamedTuple): ...: title: str ...: id: int ...: description: str = "No description given." ...: In [4]: BetterLookingArticle(title="Python is cool.", id=1) BetterLookingArticle(title='Python is cool.', id=1, description='No description given.')
Còn thay vào đó nếu ta sử dụng namedtuple
:
In [6]: import collections In [7]: Article = collections.namedtuple("Article", ["title", "description", "id"]) In [8]: Article(title="Python is cool.", id=1, description="") Article(title='Python is cool.', description='', id=1)
array.array
Các mảng giá trị số hiệu quả. Mảng là những loại trình tự hoạt động rất giống như list, ngoại trừ các loại đối tượng được lưu trữ bị hạn chế.
Khi sử dụng module array
, chúng ta cần khởi tạo bằng 1 typecode kiểu mã mà trong đó tất cả những element phần tử đều được sử dụng. Hãy so sánh tính hiệu quả về thời gian với một list thông thường, viết nhiều số nguyên trong một file (sử dụng module pickle
để viết một list thông thường):
https://gist.github.com/AdamGold/961758c66cdfe92642eabb61d9ce9866
Có thể thấy là nhanh hơn gấp 14 lần bình thường. Tất nhiên là cũng phụ thuộc vào module pickle , nhưng sử dụng mảng vẫn gọn hơn so với sử dụng list. Vậy nên nếu bạn đang dùng những giá trị số đơn giản, bạn nên cân nhắc việc sử dụng module array.
Việc làm python không yêu cầu kinh nghiệm
itertools.combinations
itertools
là một module ấn tượng. Nó có rất nhiều phương thức khác nhau giúp tiết kiệm thời gian, tất cả đều được liệt kê ở đây. Thậm chí còn có cả một kho GitHub viết nhiều hơn về itertools.
Tôi đã sử dụng phương thức combinations trong tuần này và tôi nghĩ là tôi sẽ chia sẻ về nó. Phương thức này lấy một số lặp và một số nguyên làm đối số, và tạo ra một trình bao gồm tất cả các tổ hợp có thể có của phép lặp với một dãy số nguyên dài nhất mà không bị trùng lặp:
In [16]: import itertools In [17]: list(itertools.combinations([1, 2, 3, 4], 2)) [(1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)]
dict.fromkeys
Đây là cách viết một dict cách nhanh chóng và đẹp mắt với giá trị mặc định:
In [18]: dict.fromkeys(["key1", "key2", "key3"], "DEFAULT_VALUE") {'key1': 'DEFAULT_VALUE', 'key2': 'DEFAULT_VALUE', 'key3': 'DEFAULT_VALUE'}
Cuối cùng nhưng không kém phần quan trọng – Module dis
Module dis
hỗ trợ phân tích bytecode CPython bằng cách phân tách nó.
Có thể bạn đã biết hoặc chưa biết, Python dịch mã nguồn thành một tập hợp các chỉ thị gọi là “bytecode”. Module dis giúp chúng ta xử lý những chỉ thị này, và đồng thời nó cũng là một công cụ debug tuyệt vời.
Đây là một ví dụ trong cuốn Fluent Python:
In [22]: t = (1, 2, [3, 4]) In [23]: t[2] += [30, 40] --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-25-af836a8d44a2> in <module> ----> 1 t[2] += [30, 40] TypeError: 'tuple' object does not support item assignment In [24]: t Out[24]: (1, 2, [3, 4, 30, 40])
Bị một lỗi nhưng hệ thống vẫn hoạt động. Tại sao lại như vậy? Nếu chúng ta nhìn vào bytecode (Tôi đã thêm chú thích gần những phần quan trọng):
In [25]: dis.dis("t[a] += b") 1 0 LOAD_NAME 0 (t) 2 LOAD_NAME 1 (a) 4 DUP_TOP_TWO 6 BINARY_SUBSCR 8 LOAD_NAME 2 (b) 10 INPLACE_ADD --> (value in t[a]) += b --> succeeds because list is mutable 12 ROT_THREE 14 STORE_SUBSCR --> Assign t[a] = our list --> Fails, t[a] is immutable. 16 LOAD_CONST 0 (None) 18 RETURN_VALUE
Trước khi kết thúc…
<iframe src=”https://giphy.com/embed/l2R0eYcNq9rJUsVAA” width=”480″ height=”288″ frameBorder=”0″ class=”giphy-embed” allowFullScreen></iframe><p><a href=”https://giphy.com/gifs/latelateshow-james-corden-late-show-l2R0eYcNq9rJUsVAA”>via GIPHY</a></p>
Thanks for reading! For more Python related articles and other cool stuff, you can follow me on Medium or GitHub (I star some awesome repos!).
Xin cảm ơn các bạn đã đọc bài viết này! Để đọc nhiều bài viết hơn về Python và những chủ đề hay khác, bạn có thể follow tôi trên Medium hoặc GitHub (….
Nếu bạn thích bài viết này, hãy nhấn giữ nút để những người khác có thể tìm thấy bài viết. Bạn càng giữ lâu, bạn sẽ càng chia sẻ cho nhiều người hơn!
Và đừng ngần ngại chia sẻ thêm nhiều kiến thức bổ ích về Python ở phần bình luận bên dưới nhé!
Bài viết gốc được đăng tải tại Medium
Việc làm IT mới nhất trên TopDev, tham khảo ngay!
- B BenQ RD Series – Dòng Màn Hình Lập Trình 4k+ Đầu Tiên Trên Thế Giới
- F Framework nào tốt nhất cho dự án của bạn? – Checklist chi tiết
- K Kinh nghiệm xử lý responsive table hiệu quả
- S Stackoverflow là gì? Bí kíp tận dụng Stack Overflow hiệu quả
- 7 7 kinh nghiệm hữu ích khi làm việc với GIT trong dự án
- B Bài tập Python từ cơ bản đến nâng cao (có lời giải)
- B Bảo mật API là gì? Một số nguyên tắc và kỹ thuật cần biết
- H Hướng dẫn cài đặt và tự học lập trình Python cơ bản từ A-Z
- C Chinh Phục Phân Tích Dữ Liệu Với Pandas Trong Python: Hướng Dẫn Từng Bước
- D Display CSS là gì? Cách khai báo và sử dụng thuộc tính display trong CSS