Page 92 - Python Simple
P. 92
11. Giới thiệu sơ về bộ thư viện chuẩn - Phần II http://www.vithon.org/tutorial/2.5/node13.html
các thao tác thêm vào và lấy ra đầu bên trái nhanh hơn, nhưng việc tìm kiếm ở giữa thì
lại chậm hơn. Các đối tượng này thích hợp cho việc cài đặt các hàng đợi và tìm kiếm cây
theo chiều rộng:
>>> from collections import deque
>>> d = deque(["task1", "task2", "task3"])
>>> d.append("task4")
>>> print "Handling", d.popleft()
Handling task1
unsearched = deque([starting_node])
def breadth_first_search(unsearched):
node = unsearched.popleft()
for m in gen_moves(node):
if is_goal(m):
return m
unsearched.append(m)
Ngoài các cấu trúc thay thế cho danh sách, thư viện chuẩn còn cung cấp các công cụ
như mô-đun bisect chứa các hàm thao tác trên danh sách đã được sắp xếp:
>>> import bisect
>>> scores = [(100, 'perl'), (200, 'tcl'), (400, 'lua'), (500, 'python')]
>>> bisect.insort(scores, (300, 'ruby'))
>>> scores
[(100, 'perl'), (200, 'tcl'), (300, 'ruby'), (400, 'lua'), (500, 'python')]
heapq (mô-đun) cung cấp các hàm để cài đặt đống (heap) dựa trên các danh sách thông
thường. Phần tử có giá trị thấp nhất luôn được giữ ở vị trí đầu tiên. Hàm này rất có ích
trong các trình ứng dụng đòi hỏi việc truy cập tới phần tử nhỏ nhất mà không cần phải
sắp xếp lại toàn bộ danh sách:
>>> from heapq import heapify, heappop, heappush
>>> data = [1, 3, 5, 7, 9, 2, 4, 6, 8, 0]
>>> heapify(data) # rearrange the list into heap order
>>> heappush(data, -5) # add a new entry
>>> [heappop(data) for i in range(3)] # fetch the three smallest entries
[-5, 0, 1]
11.8 Số học dấu chấm động thập phân
decimal (mô-đun) cung cấp kiểu dữ liệu Decimal cho các phép toán dấu chấm động hệ
thập phân. So với cấu trúc dấu chấm động nhị phân float sẵn có của Python, lớp này rất
có ích trong các trình ứng dụng về tài chính và các công việc đòi hỏi việc biểu diễn
chính xác các số thập phân, kiểm soát mức độ chính xác cũng như việc làm tròn các con
số theo các quy định đề ra, theo dõi vị trí của dấu chấm động hay trong các trình ứng
dụng mà người sử dụng mong muốn thu được kết quả khớp với kết quả tính toán bằng
tay.
Ví dụ như, việc tính 5% thuế trên một cuộc gọi điện giá 70 cent sẽ cho kết quả khác
nhau nếu sử dụng các phép toán dấy chấm động hệ thập phân và nhị phân. Sự khác biệt
trở nên rõ rệt nếu kết quả được làm tròn tới cent:
>>> from decimal import *
>>> Decimal('0.70') * Decimal('1.05')
6 of 7 08/31/2011 10:30 AM