Đây là một ví dụ giả tạo về việc có bao nhiêu lớp của chúng ta trả về các biểu diễn nhị phân (được đọc bởi C++) của chính chúng.Chuyển đổi Pythonic thành nhị phân?
def to_binary(self):
'Return the binary representation as a string.'
data = []
# Binary version number.
data.append(struct.pack('<I', [2]))
# Image size.
data.append(struct.pack('<II', *self.image.size))
# Attribute count.
data.append(struct.pack('<I', len(self.attributes)))
# Attributes.
for attribute in self.attributes:
# Id.
data.append(struct.pack('<I', attribute.id))
# Type.
data.append(struct.pack('<H', attribute.type))
# Extra Type.
if attribute.type == 0:
data.append(struct.pack('<I', attribute.typeEx))
return ''.join(data)
Những gì tôi không thích:
- Mỗi dòng bắt đầu với
data.append(struct.pack(
, mất tập trung từ phần độc đáo của dòng. - Thứ tự byte (
'<'
) được lặp đi lặp lại nhiều lần. - Bạn phải nhớ trả lại bản mẫu.
Những gì tôi thích:
- Định dạng specifiers xuất hiện gần tên thuộc tính. Ví dụ: thật dễ dàng để thấy rằng
self.image.size
được viết thành hai int không dấu. - Các dòng (chủ yếu) độc lập. Ví dụ: Để xóa trường Id khỏi 'thuộc tính', bạn không phải chạm nhiều hơn một dòng mã.
Có cách nào dễ đọc hơn/có thể đọc được để thực hiện việc này không?
Cú pháp khai báo là tốt nếu bạn không cần logic lập trình phức tạp để tạo tuần tự hóa (nghĩa là rất nhiều ifs và fors). Tôi đã sử dụng cách tiếp cận khai báo để xác định tuần tự hóa, deserialization và tài liệu được tạo tự động trong một lần cho một tệp nhị phân. –