2009-11-16 13 views
14

में बाइट्स बनाम बायटेयर्रे मैं पाइथन 2.6 में bytes बनाम bytearray के साथ प्रयोग कर रहा हूं। मैं कुछ मतभेदों के कारण को समझ नहीं पा रहा हूं।पाइथन 2.6 और 3

एक bytes इटरेटर रिटर्न तार:

for i in bytes(b"hi"): 
    print(type(i)) 

देता है:

<type 'str'> 
<type 'str'> 

लेकिन एक bytearray इटरेटर रिटर्न int रों:

for i in bytearray(b"hi"): 
    print(type(i)) 

देता है:

<type 'int'> 
<type 'int'> 

अंतर क्यों?

मैं कोड लिखना चाहता हूं जो पाइथन 3 में अच्छी तरह से अनुवाद करेगा। तो, क्या स्थिति पायथन 3 में समान है? ><type 'str'> -

उत्तर

24

पायथन 2.6 बाइट्स में स्ट्र के लिए केवल एक उपनाम है।
यह "छद्म प्रकार" को [आंशिक रूप से] प्रोग्राम [और प्रोग्रामर!] को पाइथन 3.0 के साथ परिवर्तित/संगत करने के लिए पेश किया गया था, जहां अर्थशास्त्र का सख्त भेद है और स्ट्र (जो व्यवस्थित रूप से यूनिकोड हैं) और बाइट्स (आंकड़ों को संग्रहित करने के लिए ऑक्टेट्स के सरणी हैं, लेकिन पाठ नहीं)

इसी तरह स्ट्रिंग अक्षर के लिए बी उपसर्ग 2.6 में अप्रभावी है, लेकिन यह प्रोग्राम में एक उपयोगी मार्कर है, जो स्पष्ट रूप से प्रोग्रामर के इरादे को झुकाता है एक पाठ स्ट्रिंग के बजाय डेटा स्ट्रिंग के रूप में स्ट्रिंग। इस जानकारी को 2to3 कनवर्टर या इसी तरह की उपयोगिताओं द्वारा तब उपयोग किया जा सकता है जब प्रोग्राम Py3k पर पोर्ट किया जाता है।

आप अतिरिक्त जानकारी के लिए यह SO Question देख सकते हैं।

+0

अधिक जानकारी के लिए देखें: http://docs.python.org/whatsnew/2.6.html#pep-3112-byte-literals और http://docs.python.org/3.1/library/stdtypes.html# अनुक्रम-प्रकार-str-bytes-bytearray-list-tuple-range –

3

मुझे यकीन है कि कौन-सा संस्करण के बाद से, लेकिन bytes वास्तव में एक str, जो आप अगर आप type(bytes(b"hi")) कर देख सकते हैं नहीं कर रहा हूँ।

bytearray बाइट्स की एक परिवर्तनीय सरणी है, जिसमें से एक कन्स्ट्रक्टर स्ट्रिंग लेता है।

4

मैंने इसे पायथन 3.0 पर आजमाया।

अजगर 3.0 में, एक bytes इटरेटर रिटर्न int रों, तार नहीं के रूप में अजगर 2.6 किया:

for i in bytes(b"hi"): 
    print(type(i)) 

देता है:

<class 'int'> 
<class 'int'> 

एक bytearray इटरेटर भी रिटर्न class 'int' रों।

+0

हालांकि, 'बाइट्स' ऑब्जेक्ट अभी भी अपरिवर्तनीय है, जैसे 'str', जबकि 'bytearray' उत्परिवर्तनीय है और इसमें' सूची 'जैसी इंटरफ़ेस है। –

संबंधित मुद्दे