2014-07-08 5 views
6

मैं पाइथन के लिए बिल्कुल नया हूं और मैं इसकी गतिशील भाषा की सराहना करता हूं। (कम से कम कहने के लिए) मेरी पहली अजगर कोड में कुछ 30 मिनट, मुझे पता चला है कि bytes प्रकार एक छोटे से अजीब व्यवहार करती है:प्रकार (बाइट्स))

a = bytes() 
print type(a) 
// prints: <type 'str'> 

इसे यहाँ का प्रयास करें: http://ideone.com/NqbcHk

अब, docs कहना strings और bytes.format और .encode के अपवाद के साथ बहुत समान व्यवहार करते हैं लेकिन मुझे उम्मीद नहीं थी कि वे एक ही प्रकार के थे। मैं यह सुनिश्चित करना चाहता हूं कि मुझे अपने कोड में वास्तविक बाइट्स के साथ काम करना पड़े, और कोई जबरदस्त/एन्कोडिंग/डिकोडिंग नहीं होती है।

तो यहां क्या हो रहा है?

+0

पायथन 3 में, बाइट बाइट हैं, स्ट्र नहीं। आप गलत संस्करण की जांच कर रहे हैं :) – aIKid

+0

धन्यवाद दोस्तों - मैं शर्मिंदा हूं। आगे जाने से पहले कुछ कॉफी प्राप्त करनी चाहिए :-) –

उत्तर

10

bytes प्रकार पायथन 3.x में नया है। पाइथन 2.x में, एक संगतता शिम के रूप में, bytesstr पर एक साधारण उपनाम है।

इस बारे में यहाँ और अधिक पढ़ें: https://docs.python.org/2/whatsnew/2.6.html#pep-3112-byte-literals

अजगर 3.0 भाषा के मौलिक स्ट्रिंग प्रकार के रूप में यूनिकोड को गोद ले और अलग ढंग से 8 बिट शाब्दिक अर्थ है, या तो b'string' रूप में या एक बाइट्स निर्माता का उपयोग कर। भविष्य की संगतता के लिए, पायथन 2.6 बाइट्स को स्ट्रिंग प्रकार के समानार्थी के रूप में जोड़ता है, और यह b'' नोटेशन का भी समर्थन करता है।

2.6 str विभिन्न तरीकों से 3.0 के बाइट प्रकार से अलग है; सबसे अधिक विशेष रूप से, निर्माता पूरी तरह से अलग है। 3.0 में, bytes([65, 66, 67]) 3 तत्व लंबा है, जिसमें एबीसी का प्रतिनिधित्व करने वाले बाइट शामिल हैं; 2.6, bytes([65, 66, 67]) सूची में str() का प्रतिनिधित्व करने वाले 12-बाइट स्ट्रिंग को लौटाता है।

2.6 में बाइट्स का प्राथमिक उपयोग ऑब्जेक्ट प्रकार जैसे isinstance(x, bytes) के परीक्षण लिखना होगा। यह 2to3 कनवर्टर की मदद करेगा, जो यह नहीं बता सकता कि 2.x कोड स्ट्रिंग्स को वर्ण या 8-बिट बाइट्स रखने का इरादा रखता है; अब आप या तो बाइट्स या स्ट्र का उपयोग अपने इरादे का प्रतिनिधित्व कर सकते हैं, और परिणामी कोड भी पायथन 3.0 में सही होगा।

8

आप पाइथन 3 डॉक्स देख रहे हैं। पायथन 2, bytesstr के लिए उपनाम है, जो आगे-संगत कोड लिखना आसान बनाता है (पायथन 2 का str एक बाइट स्ट्रिंग है, जबकि पायथन 3 str में पाइथन 2 में unicode कहा जाता है)।

अधिक जानकारी के लिए, What’s New In Python 3.0 देखें।