Trong hướng dẫn này, chúng ta sẽ học cách sử dụng cmp[] i. e hàm so sánh trong Python. Chức năng này có hành vi khác nhau trong các phiên bản khác nhau của Python. Trong Python phiên bản 2. x [x=1,2,3,…] chúng ta có thể trực tiếp sử dụng cmp[] để so sánh hai thực thể bất kỳ thuộc loại float, integer hoặc string
cmp[]. So sánh nhận hai đối số mà chúng tôi muốn thực hiện thao tác so sánh và nó trả về một giá trị số nguyên theo kết quả.
Nó trả về -1 nếu đối số thứ nhất nhỏ hơn đối số thứ hai, trả về 1 nếu đối số thứ nhất lớn hơn đối số thứ hai và trả về 0 nếu cả hai đối số bằng nhau. Chức năng cmp[] này chỉ hoạt động trên Python phiên bản 2. x, nếu bạn cố gắng sử dụng nó trong phiên bản 3. x nó báo lỗi.
NameError: name 'cmp' is not defined [Finished in 0.1s with exit code 1]
Ví dụ
Xem mã dưới đây
a=60 b=90 print[cmp[a,b]]
output: -1
Trong khi so sánh các số nguyên cmp[] chỉ thực hiện phép trừ đối số i của nó. e trong trường hợp này là a-b, nếu phép trừ là -ve thì nó trả về -1 i. e ab
if subtraction is +ve it returns 1 i.e a>b
a=90 b=60 print[cmp[a,b]]
output: 1
a="abc" b="abc" print[cmp[a,b]]
output: 0
khi cả hai đối số đều bằng nhau. e a=b, nó trả về 0 làm đầu ra. Ở đây, chúng tôi đã chuyển hai loại giá trị chuỗi. Ở đây, cmp[] so sánh cả chuỗi ký tự theo ký tự và nếu tìm thấy giống nhau thì trả về 0
So sánh các đối tượng trong 3. x phiên bản Python
Hàm cmp[] có một nhược điểm đã bị loại bỏ trong các phiên bản sau của Python i. e3. x[x=1,2,3,…]. Bất cứ khi nào chúng tôi cố gắng chuyển một số nguyên và một chuỗi để so sánh, nó sẽ luôn hiển thị chuỗi lớn hơn một số nguyên
a="abc" b=90 print[cmp[a,b]] print[cmp[a,b]]
output: 1 -1
bất cứ khi nào so sánh chuỗi và số nguyên, việc so sánh được thực hiện dựa trên tên của các kiểu dữ liệu. Theo mặc định, một chuỗi luôn được coi là lớn hơn một số nguyên [i. e “str”>”int”]
Mô-đun filecmp
xác định các chức năng để so sánh các tệp và thư mục, với nhiều sự đánh đổi thời gian/độ chính xác tùy chọn khác nhau. Để so sánh các tệp, hãy xem thêm mô-đun
a=60 b=90 print[cmp[a,b]]0
Mô-đun filecmp
xác định các chức năng sau
So sánh các tệp có tên f1 và f2, trả về
a=60 b=90 print[cmp[a,b]]2 nếu chúng có vẻ bằng nhau, ngược lại là
a=60 b=90 print[cmp[a,b]]3
Nếu nông là đúng và chữ ký
a=60 b=90 print[cmp[a,b]]4 [loại tệp, kích thước và thời gian sửa đổi] của cả hai tệp giống hệt nhau, thì các tệp được coi là bằng nhau
Mặt khác, các tệp được coi là khác nếu kích thước hoặc nội dung của chúng khác nhau
Lưu ý rằng không có chương trình bên ngoài nào được gọi từ chức năng này, mang lại tính di động và hiệu quả
Hàm này sử dụng bộ đệm để so sánh trong quá khứ và kết quả, với các mục nhập bộ đệm bị vô hiệu nếu thông tin
a=60 b=90 print[cmp[a,b]]4 cho tệp thay đổi. Toàn bộ bộ đệm có thể bị xóa bằng cách sử dụng
a=60 b=90 print[cmp[a,b]]6filecmp. tệp cmp[dir1 , dir2 , phổ biến , nông=Đúng]¶
So sánh các tệp trong hai thư mục dir1 và dir2 có tên được đặt theo tên chung
Trả về ba danh sách tên tệp. phù hợp, không phù hợp, lỗi. match chứa danh sách các tệp khớp, mismatch chứa tên của những tệp không khớp và error liệt kê tên của các tệp không thể so sánh. Các tệp được liệt kê trong lỗi nếu chúng không tồn tại trong một trong các thư mục, người dùng không có quyền đọc chúng hoặc nếu việc so sánh không thể thực hiện được vì một số lý do khác
Tham số nông có cùng ý nghĩa và giá trị mặc định như đối với filecmp
0
Ví dụ: filecmp
1 sẽ so sánh filecmp
2 với filecmp
3 và filecmp
4 với filecmp
5. filecmp
6 và filecmp
7 mỗi cái sẽ nằm trong một trong ba danh sách được trả về
Xóa bộ đệm filecmp. Điều này có thể hữu ích nếu một tệp được so sánh quá nhanh sau khi nó được sửa đổi để nó nằm trong độ phân giải mtime của hệ thống tệp cơ bản
Mới trong phiên bản 3. 4
Lớp filecmp
8¶
lớp filecmp. dircmp[a , b, ignore=None, hide=None]¶Xây dựng một đối tượng so sánh thư mục mới, để so sánh các thư mục a và b. bỏ qua là danh sách các tên cần bỏ qua và mặc định là filecmp
9. hide là danh sách các tên cần ẩn và mặc định là filecmp
0
Lớp filecmp
8 so sánh các tệp bằng cách thực hiện so sánh nông như được mô tả cho filecmp
0
Lớp filecmp
8 cung cấp các phương thức sau
In [đến filecmp
4] so sánh giữa a và b
In so sánh giữa a và b và các thư mục con trực tiếp phổ biến
report_full_closure[] ¶In so sánh giữa a và b và các thư mục con chung [đệ quy]
Lớp filecmp
8 cung cấp một số thuộc tính thú vị có thể được sử dụng để lấy nhiều thông tin khác nhau về các cây thư mục được so sánh
Lưu ý rằng thông qua móc nối filecmp
6, tất cả các thuộc tính đều được tính toán một cách lười biếng, vì vậy sẽ không bị phạt về tốc độ nếu chỉ sử dụng những thuộc tính nhẹ để tính toán
Thư mục một
đúng ¶thư mục b
left_list ¶Các tệp và thư mục con trong a, được lọc bằng cách ẩn và bỏ qua
right_list ¶Các tệp và thư mục con trong b, được lọc bằng cách ẩn và bỏ qua
chung ¶Tệp và thư mục con trong cả a và b
left_only ¶Các tệp và thư mục con chỉ trong một
Tệp và thư mục con chỉ trong b
common_dirs ¶Thư mục con trong cả a và b
common_files ¶Các tệp trong cả a và b
common_funny ¶Tên trong cả a và b, sao cho loại khác nhau giữa các thư mục hoặc tên mà
a=60 b=90 print[cmp[a,b]]4 báo cáo lỗisame_files ¶
Các tệp giống hệt nhau ở cả a và b, sử dụng toán tử so sánh tệp của lớp
diff_files ¶Các tệp nằm trong cả a và b, có nội dung khác nhau tùy theo toán tử so sánh tệp của lớp
funny_files ¶Các tệp ở cả a và b, nhưng không thể so sánh được
thư mục con ¶Từ điển ánh xạ tên trong các phiên bản filecmp
8 đến filecmp
8 [hoặc phiên bản MyDirCmp nếu phiên bản này thuộc loại MyDirCmp, một lớp con của filecmp
8]
Đã thay đổi trong phiên bản 3. 10. Các mục nhập trước đây luôn là phiên bản filecmp
8. Bây giờ các mục có cùng loại với self, nếu self là một lớp con của filecmp
8.
Mới trong phiên bản 3. 4
Danh sách các thư mục bị bỏ qua bởi filecmp
8 theo mặc định
Dưới đây là một ví dụ đơn giản về việc sử dụng thuộc tính
a=60 b=90 print[cmp[a,b]]04 để tìm kiếm đệ quy qua hai thư mục để hiển thị các tệp phổ biến khác nhau