Tôi mới làm quen với perl, ở hầu hết các nơi mà băm được sử dụng để tham chiếu đến từ điển của python. Một sự khác biệt mà tôi đã nhận thấy là các băm không bảo vệ trật tự của các phần tử. Tôi muốn biết nếu có một số khác biệt cụ thể và cơ bản hơn giữa hai người.sự khác biệt giữa băm của perl và từ điển python
Trả lời
Sự khác biệt cơ bản nhất là băm perl không ném lỗi nếu bạn truy cập các phần tử không có ở đó.
$ python -c 'd = {}; print d["a"]'
Traceback (most recent call last):
File "<string>", line 1, in <module>
KeyError: 'a'
$ perl -e '$d = {}; print $d->{a}'
$
Perl băm tự động tạo ra các yếu tố quá không giống như python
$ python -c 'd = dict(); d["a"]["b"]["c"]=1'
Traceback (most recent call last):
File "<string>", line 1, in <module>
KeyError: 'a'
$ perl -e '$d = {}; $d->{a}{b}{c}=1'
$
Nếu bạn đang chuyển đổi perl
-python
những được những điều chính mà sẽ bắt bạn out.
Bạn nên 'sử dụng nghiêm ngặt; sử dụng cảnh báo; 'trong tất cả các kịch bản Perl của bạn. Điều đó cũng sẽ loại bỏ một số sự khác biệt này. Tôi nghĩ bạn sẽ thấy rằng hầu hết các khác biệt đáng kể là ở các phần khác của ngôn ngữ, như mô hình "mọi thứ là một đối tượng" của Python, và trong xử lý ngoại lệ. – tripleee
@triplee 'sử dụng nghiêm ngặt; sử dụng các cảnh báo; 'không tạo ra bất kỳ sự khác biệt nào trong trường hợp này, nó cấm bạn sử dụng các biến không khai báo, không phải các mục từ điển không được xác định. – ZyX
Bạn có thể sắp xếp mô phỏng hành vi Perl bằng 'collections.defaultdict' bằng Python, nhưng bạn vẫn phải lo lắng về các loại đối tượng. –
Một khác biệt lớn là trong Python bạn có thể có các đối tượng (do người dùng định nghĩa) làm các khóa từ điển của bạn. Từ điển sẽ sử dụng các phương pháp '__hash__
và __eq__
' để quản lý điều này.
Trong Perl, bạn không thể sử dụng các đối tượng làm khóa băm theo mặc định. Các khóa được lưu trữ dưới dạng chuỗi và các đối tượng sẽ được nội suy thành các chuỗi nếu bạn cố gắng sử dụng chúng làm khóa. (Tuy nhiên, có thể sử dụng các đối tượng làm khóa bằng cách sử dụng hàm băm được gắn với một mô-đun như Tie::RefHash.)
- 1. Sự khác biệt thực sự giữa từ điển và bảng băm là gì?
- 2. Sự khác biệt giữa HashMap và từ điển ADT
- 3. Sự khác biệt giữa $ @ và $! trong perl
- 4. Sự khác biệt giữa đối tượng và từ điển?
- 5. Sự khác biệt giữa Hashtable và Từ điển là gì?
- 6. Sự khác biệt giữa 'ký tự' và 'octet' trong băm
- 7. Sự khác biệt giữa Smalltalk và python?
- 8. tìm sự khác biệt giữa hai từ điển
- 9. Sự khác biệt giữa một đối tượng và một băm?
- 10. Sự khác biệt giữa Nhiều Nếu và Elif của Python
- 11. Sự khác nhau giữa từ điển và mảng là gì?
- 12. Sự khác biệt giữa bản đồ và dict
- 13. sự khác biệt giữa python 2.7.3 và python 3.3
- 14. Sự khác biệt giữa $ * và $ @
- 15. Sự khác biệt giữa SimpleDB và S3
- 16. Sự khác biệt giữa Tries và Trees?
- 17. Sự khác biệt giữa = và: =
- 18. Sự khác biệt giữa Microsoft.Jet.OleDb và Microsoft.Ace.OleDb
- 19. Sự khác biệt giữa $ (...) và `...`
- 20. Sự khác biệt giữa. và #
- 21. Sự khác biệt giữa ". +" Và ". +?"
- 22. Sự khác biệt giữa "**/* /" và "** /"?
- 23. Sự khác biệt số nguyên trong python giữa hai ngày
- 24. Sự khác biệt giữa hàm băm rỗng và không có hàm băm
- 25. Sự khác biệt giữa Kivy và PY4A
- 26. Sự khác biệt giữa sqlite3 từ python2.5, pysqlite và apsw
- 27. sự khác biệt giữa việc thêm và [] trong hoạt động từ điển
- 28. Sự khác biệt giữa plt.close() và plt.clf()
- 29. Sự khác biệt giữa phạm vi từ vựng và động trong Perl là gì?
- 30. Sự khác biệt giữa dir (…) và vars (…) .keys() bằng Python?
Từ điển Python cũng không giữ nguyên thứ tự của các phần tử. –
Từ điển Python không giữ nguyên thứ tự của các phần tử; chúng được triển khai dưới dạng bảng băm. – Philipp