मैं एक यूडीपी सॉकेट भेजने के लिए एक ही बफर में एक सूची में सभी डेटा पैक करना चाहता हूं। सूची अपेक्षाकृत लंबी है, इसलिए सूची में प्रत्येक तत्व को अनुक्रमणित करना कठिन है।पायथन struct.pack()?
NumElements = len(data)
buf = struct.pack('d'*NumElements,data[0],data[1],data[2],data[3],data[4])
लेकिन मैं कुछ अधिक pythonic की आवश्यकता नहीं है कि मैं कॉल बदल अगर मैं सूची में और अधिक तत्वों को जोड़ा गया ... की तरह कुछ करना चाहते हैं:
यह वही है मैं अब तक किया हैNumElements = len(data)
buf = struct.pack('d'*NumElements,data) # Returns error
क्या ऐसा करने का कोई अच्छा तरीका है ??
आह! धन्यवाद! – user1636547
'डी '* न्यूमलीमेंट्स' बहुत अच्छा अभ्यास नहीं है, यह एक बहुत बड़ी स्ट्रिंग बनाने के लिए समाप्त हो सकता है, केवल समय पार्सिंग बर्बाद करने के लिए, केवल बाद में मुक्त करने के लिए। इसके बजाय स्ट्रिंग में सीधे संख्या शामिल करें: 'buf = struct.pack (" {0: d} d ".format (NumElements), * डेटा)' – ideasman42
@ ideasman42: अच्छा बिंदु। लेकिन मूल्यों की एक बड़ी संख्या के साथ, 500000 तर्कों में उन्हें अनपॅक करने से 'डी' * 500000 गुजरने की समस्या हो सकती है, इसलिए आप इसे 'बी' के खिलाफ परीक्षण करना चाहेंगे। (Struct.pack ('d' , elem) डेटा में elem के लिए) ', या' struct' के बजाय 'array 'या' ctypes' जैसे कुछ का उपयोग करने पर विचार करें। – abarnert