หากคุณดูเอกสารbytes
นั้นจะนำคุณไปที่bytearray
:
bytearray ([แหล่ง [การเข้ารหัส [ข้อผิดพลาด]]])
ส่งกลับอาร์เรย์ไบต์ใหม่ ประเภท bytearray เป็นลำดับที่ไม่แน่นอนของจำนวนเต็มในช่วง 0 <= x <256 มันมีวิธีการปกติมากที่สุดของลำดับที่ไม่แน่นอนที่อธิบายไว้ในประเภทลำดับที่ไม่แน่นอนเช่นเดียวกับวิธีส่วนใหญ่ที่ประเภทไบต์มีดูไบต์และ วิธีการอาร์เรย์ไบต์
พารามิเตอร์ต้นทางที่เป็นทางเลือกสามารถใช้ในการเริ่มต้นอาร์เรย์ได้หลายวิธี:
หากเป็นสตริงคุณต้องให้พารามิเตอร์การเข้ารหัส (และเป็นทางเลือกข้อผิดพลาด) ด้วย bytearray () จากนั้นแปลงสตริงเป็นไบต์โดยใช้ str.encode ()
ถ้าเป็นจำนวนเต็มอาร์เรย์จะมีขนาดนั้นและจะถูกเตรียมใช้งานด้วยไบต์ว่าง
ถ้ามันเป็นวัตถุที่สอดคล้องกับส่วนต่อประสานบัฟเฟอร์บัฟเฟอร์แบบอ่านอย่างเดียวของวัตถุจะถูกใช้เพื่อเริ่มต้นอาร์เรย์ไบต์
ถ้าเป็นตัววนซ้ำมันต้องเป็นตัววนซ้ำในช่วง 0 <= x <256 ซึ่งใช้เป็นเนื้อหาเริ่มต้นของอาร์เรย์
หากไม่มีอาร์กิวเมนต์จะสร้างอาร์เรย์ขนาด 0 ขึ้นมา
ดังนั้นbytes
สามารถทำได้มากกว่าการเข้ารหัสสตริง เป็น Pythonic ที่อนุญาตให้คุณเรียก Constructor ด้วยพารามิเตอร์ซอร์สชนิดใดก็ได้ที่สมเหตุสมผล
สำหรับการเข้ารหัสสตริงฉันคิดว่าsome_string.encode(encoding)
มันเป็น Pythonic มากกว่าการใช้ Constructor เพราะมันเป็นการทำเอกสารด้วยตัวเองมากที่สุด - "รับสายนี้แล้วเข้ารหัสด้วยการเข้ารหัสนี้" ชัดเจนกว่าbytes(some_string, encoding)
- ไม่มีกริยาที่ชัดเจนเมื่อคุณใช้ นวกรรมิก
แก้ไข:ฉันตรวจสอบแหล่ง Python ถ้าคุณผ่านสายอักขระ Unicode ที่จะbytes
ใช้ CPython มันเรียกPyUnicode_AsEncodedStringซึ่งเป็นการดำเนินงานของencode
; ดังนั้นคุณแค่ข้ามระดับของการอ้อมไปถ้าคุณเรียกencode
ตัวเองว่า
นอกจากนี้ดูความคิดเห็นของ Serdalis - unicode_string.encode(encoding)
เป็น Pythonic มากกว่าเพราะการผกผันของมันbyte_string.decode(encoding)
และสมมาตรนั้นดี