a='aaaa'
print isinstance(a, basestring)#true
print isinstance(a, str)#true
Trả lời
Trong các phiên bản Python trước 3.0 có hai loại chuỗi "chuỗi đồng bằng" và "chuỗi unicode". Các chuỗi đồng bằng (str
) không thể đại diện cho các ký tự nằm ngoài bảng chữ cái Latinh (bỏ qua chi tiết của các trang mã để đơn giản). Các chuỗi Unicode (unicode
) có thể đại diện cho các ký tự từ bất kỳ bảng chữ cái nào bao gồm một số ký tự hư cấu như Klingon.
Vì vậy, tại sao có hai loại chuỗi, nó sẽ không tốt hơn nếu chỉ có Unicode vì nó sẽ bao gồm tất cả các trường hợp? Vâng, tốt hơn là chỉ có Unicode nhưng Python được tạo ra trước khi Unicode là phương thức ưa thích để biểu diễn các chuỗi. Phải mất thời gian để chuyển đổi kiểu chuỗi trong một ngôn ngữ với nhiều người dùng, trong Python 3.0 nó cuối cùng là trường hợp tất cả các chuỗi là Unicode.
Các hệ thống phân cấp thừa kế của chuỗi Python pre-3.0 là:
object
|
|
basestring
/\
/ \
str unicode
'basestring' giới thiệu trong Python 2.3 có thể được coi như một bước theo hướng chuỗi thống nhất vì nó có thể được sử dụng để kiểm tra xem một đối tượng là một thể hiện của str
hoặc unicode
>>> string1 = "I am a plain string"
>>> string2 = u"I am a unicode string"
>>> isinstance(string1, str)
True
>>> isinstance(string2, str)
False
>>> isinstance(string1, unicode)
False
>>> isinstance(string2, unicode)
True
>>> isinstance(string1, basestring)
True
>>> isinstance(string2, basestring)
True
Tất cả các chuỗi là chuỗi gốc, nhưng chuỗi unicode không thuộc loại str. Hãy thử thay vào đó:
>>> a=u'aaaa'
>>> print isinstance(a, basestring)
True
>>> print isinstance(a, str)
False
Basestring là siêu lớp của chuỗi. Trong ví dụ của bạn, một kiểu là "str" do đó, nó là cả một basestring, và một str
Thực sự những gì bạn đang hỏi là sự khác biệt giữa lớp basestring và str.
Str là một lớp kế thừa từ basestr. Nhưng các chuỗi unicode cũng tồn tại, cũng như các chuỗi khác, nếu bạn muốn tạo một chuỗi.
>>> a = u'aaaa'
>>> isinstance(a, str)
False
>>> isinstance(a, basestring)
True
- 1. khác biệt giữa A aaa; và A aaa();
- 2. Sự khác biệt trong python giữa basestring và types.StringType?
- 3. Java isInstance vs instanceOf operator
- 4. IsInstance trong mẫu Django?
- 5. instanceof vs isinstance()
- 6. sự khác biệt giữa stringstream rõ ràng và str
- 7. Python sự khác biệt giữa str (u'a ') và u'a'.encode (' utf-8 ') là gì
- 8. C# tương đương với isInstance của Java() là gì?
- 9. Tương đương issubclass của isinstance trong python là gì?
- 10. isinstance (object, type) trong python
- 11. Rhino Mocks AAA Bắt đầu nhanh?
- 12. Sử dụng Python `isinstance` có đúng không?
- 13. "aaaa" .StartsWith ("aaa") trả về false
- 14. Sự khác biệt giữa JavaBean và POJO là gì?
- 15. Sự khác biệt giữa betweeen% INC và @INC là gì?
- 16. Sự khác biệt giữa INTERSECT và WHERE IN là gì?
- 17. Sự khác biệt giữa RoutedCommand và RoutedUICommand là gì?
- 18. Sự khác biệt chính giữa Sinatra và Ramaze là gì?
- 19. Sự khác biệt giữa DBI và DBD là gì?
- 20. Sự khác biệt giữa NSInvocation và chặn là gì?
- 21. Sự khác biệt giữa fn và fn * là gì?
- 22. Sự khác biệt giữa xtype và bí danh là gì?
- 23. Sự khác biệt giữa build.sbt và build.scala là gì?
- 24. Sự khác biệt giữa localname và qname là gì?
- 25. Sự khác biệt giữa Application.ThreadException và AppDomain.CurrentDomain.UnhandledException là gì?
- 26. Sự khác biệt giữa while (true) và loop là gì?
- 27. Sự khác biệt giữa dealloc và viewdidunload là gì?
- 28. Sự khác biệt giữa uint và System.UInt32 là gì?
- 29. Sự khác biệt giữa heuristic và thuật toán là gì?
- 30. Sự khác biệt giữa decodeURIComponent và decodeURI là gì?
+1 cho đồ thị ascii đẹp ;-) – ChristopheD
Đã thay đổi này bằng Python 3? Là 'str' và' byte' mới vẫn là con của 'basestring'? Sẽ có giá trị thêm một lưu ý về điều này. – MestreLion
+1. Lời giải thích tuyệt vời cho những người không có nền tảng lập trình, những người đang cố gắng hiểu và hoàn thành công việc với Python (bao gồm cả tôi). – RubenGeert