Tiền tố ab trước chuỗi python có nghĩa là gì?


107

Trong mã nguồn python, tôi tình cờ thấy tôi đã thấy một b nhỏ trước một chuỗi như trong:

b"abcdef"

Tôi biết về utiền tố biểu thị một chuỗi unicode và rtiền tố cho một chuỗi thô.

Viết btắt của nó là gì và nó hữu ích trong loại mã nguồn nào vì nó có vẻ giống hệt như một chuỗi thuần túy không có tiền tố nào?


10
@ Dưới: theo liên kết bạn cung cấp, bạn sẽ thấy tiền tố b không được phép trong tiền tố chuỗi ... cho 2.6 (có vẻ như một lỗi nhỏ trong tài liệu tham khảo). Và googling về những thứ này không phải là dễ dàng. Tôi đã thử các từ khóa như "tiền tố chuỗi b python" và về cơ bản không có kết quả.
kriss

Liên kết S.Lott được sử dụng thiếu thông số phiên bản; đây là về Python 3: docs.python.org/3/reference/… . Tiền tố hiện cũng được hỗ trợ trong Python 2.6 trở lên để tạo điều kiện cho mã Python phiên bản chéo.
Martijn Pieters

1
câu hỏi này không phải là "một bản sao chính xác" cũng không phải là câu trả lời cho câu hỏi "Tôi có thể loại bỏ ký tự 'b' này trong câu lệnh in của mình không?" stackoverflow.com/questions/42599851/… bạn có phiền bỏ đánh dấu làm ơn marijin không? người đã hỏi cũng như người thực sự cố gắng trả lời có thể đánh giá cao việc có thể có câu trả lời cho câu hỏi thực tế được đặt ra.
me_

Câu trả lời:


62

Đây là bytes nghĩa đen của Python3 . Tiền tố này không có trong Python 2.5 trở lên (nó tương đương với một chuỗi thuần túy là 2.x, trong khi chuỗi thuần túy 3.x tương đương với một ký tự có utiền tố trong 2.x). Trong Python 2.6+ nó tương đương với một chuỗi đơn giản, để tương thích với 3.x .


@WRAR: Đã ở trong mã python 2.6 Tôi đã thấy cái này, có vẻ như nó đã được giới thiệu trong python2.6
kriss

Tôi đặc biệt kiểm tra nó trong 2,6 tham khảo trước khi gửi bài: docs.python.org/reference/lexical_analysis.html#literals
wRAR

1
OK, "Để tương thích trong tương lai, Python 2.6 thêm byte làm từ đồng nghĩa với kiểu str và nó cũng hỗ trợ ký hiệu b ''.", Từ "Có gì mới".
wRAR

vì các liên kết ở trên hiện trỏ đến tham chiếu 2.7 và tiền tố b đã được thêm vào, đây là liên kết đến tham chiếu không có thật docs.python.org/release/2.6.8/reference/…
kriss

98

Các btiền tố biểu thị một bytesliteral chuỗi .

Nếu bạn thấy nó được sử dụng trong mã nguồn Python 3, thì biểu thức sẽ tạo một bytesđối tượng , không phải một đối tượng Unicodestr thông thường . Nếu bạn thấy nó được lặp lại trong trình bao Python của mình hoặc là một phần của danh sách, dict hoặc nội dung vùng chứa khác, thì bạn sẽ thấy một bytesđối tượng được biểu diễn bằng ký hiệu này.

bytesCác đối tượng về cơ bản chứa một chuỗi các số nguyên trong phạm vi 0-255, nhưng khi được biểu diễn, Python hiển thị các byte này dưới dạng mã ASCII để giúp dễ đọc nội dung của chúng hơn. Bất kỳ byte bên ngoài có thể in hàng loạt các ký tự ASCII được hiển thị như trình tự thoát (ví dụ \n, \x82vv). Ngược lại, bạn có thể sử dụng cả ký tự ASCII và trình tự thoát để xác định giá trị byte; đối với các giá trị ASCII, giá trị số của chúng được sử dụng (ví dụ: b'A'== b'\x41')

Bởi vì một bytesđối tượng bao gồm một chuỗi các số nguyên, bạn có thể tạo một bytesđối tượng từ bất kỳ chuỗi số nguyên nào khác có giá trị trong phạm vi 0-255, như danh sách:

bytes([72, 101, 108, 108, 111])

và lập chỉ mục cho phép bạn sao lưu các số nguyên (nhưng cắt tạo ra một mới bytesgiá trị, vì ví dụ trên, value[0]mang đến cho bạn 72, nhưng value[:1]b'H'như 72 là điểm mã ASCII cho các chữ cái viết hoa H ).

bytesmô hình dữ liệu nhị phân , bao gồm cả văn bản được mã hóa . Nếu bytesgiá trị của bạn có chứa văn bản, trước tiên bạn cần giải mã nó bằng cách sử dụng codec chính xác. Ví dụ: nếu dữ liệu được mã hóa dưới dạng UTF-8, bạn có thể lấy strgiá trị Unicode với:

strvalue = bytesvalue.decode('utf-8')

Ngược lại, để chuyển từ văn bản trong một strđối tượng sang bytesbạn cần mã hóa . Bạn cần phải quyết định một bảng mã để sử dụng; mặc định là sử dụng UTF-8, nhưng những gì bạn sẽ cần phụ thuộc nhiều vào trường hợp sử dụng của bạn:

bytesvalue = strvalue.encode('utf-8')

Bạn cũng có thể sử dụng hàm tạo bytes(strvalue, encoding)để làm tương tự.

Cả hai phương pháp giải mã và mã hóa đều có thêm một đối số để chỉ định cách xử lý lỗi .

Python 2, phiên bản 2.6 và 2.7 cũng hỗ trợ tạo các ký tự b'..'chuỗi bằng cách sử dụng cú pháp ký tự chuỗi, để dễ dàng mã hoạt động trên cả Python 2 và 3.

bytescác đối tượng là bất biến, giống như strchuỗi. Sử dụng một bytearray()đối tượng nếu bạn cần có giá trị byte có thể thay đổi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.