यहां एक समेकित उदाहरण है कि हमारे कितने वर्ग बाइनरी प्रस्तुतियों (सी ++ द्वारा पढ़ा जा सकता है) लौटते हैं।बाइनरी के लिए अधिक पायथनिक रूपांतरण?
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)
मैं क्या नापसंद:
- हर लाइन,
data.append(struct.pack(
साथ शुरू होता है लाइन की अनूठी भाग से ध्यान भंग। - बाइट ऑर्डर (
'<'
) बार-बार दोहराया जाता है। - आपको बॉयलरप्लेट
''.join(data)
वापस करना याद रखना होगा।
मैं क्या पसंद:
- प्रारूप विनिर्देशक विशेषता नाम के पास दिखाई देते हैं। उदाहरण के लिए, यह देखना आसान है कि
self.image.size
दो हस्ताक्षरित इनट्स के रूप में लिखा गया है। - रेखाएं (अधिकतर) स्वतंत्र हैं। उदाहरण के लिए, 'विशेषता' से आईडी फ़ील्ड को निकालने के लिए, आपको कोड की एक से अधिक पंक्तियों को स्पर्श करने की आवश्यकता नहीं है।
क्या ऐसा करने के लिए एक और अधिक पठनीय/पायथनिक तरीका है?
घोषणात्मक वाक्यविन्यास अच्छा है यदि आपको क्रमबद्धता बनाने के लिए जटिल प्रोग्रामेटिक तर्क की आवश्यकता नहीं है (यानी बहुत सारे ifs और fors)। मैंने एक बाइनरी फ़ाइलफॉर्मेट के लिए एक बार में serialization, deserialization और स्वचालित रूप से जेनरेट किए गए दस्तावेज़ निर्दिष्ट करने के लिए घोषणात्मक दृष्टिकोण का उपयोग किया है। –