পাইথন ৩.x প্রকারের মধ্যে স্পষ্ট পার্থক্য করে:
str
= '...'
আক্ষরিক = ইউনিকোড অক্ষরের একটি অনুক্রম (ইউটিএফ -16 বা ইউটিএফ -32, পাইথনটি কীভাবে সংকলিত হয়েছিল তার উপর নির্ভর করে)
bytes
= b'...'
আক্ষরিক = অক্টেটের ক্রম (0 এবং 255 এর মধ্যে পূর্ণসংখ্যা)
আপনি যদি জাভা বা সি # এর সাথে পরিচিত হন তবে str
হিসাবে String
এবং bytes
হিসাবে চিন্তা করুন byte[]
। আপনি এসকিউএল সাথে পরিচিত হন, তাহলে মনে str
যেমন NVARCHAR
এবং bytes
হিসাবে BINARY
বা BLOB
। যদি আপনি উইন্ডোজ রেজিস্ট্রির সাথে পরিচিত হন তবে str
হিসাবে REG_SZ
এবং bytes
হিসাবে মনে করুন REG_BINARY
। আপনি যদি সি (++) এর সাথে পরিচিত হন, তবে আপনি যা শিখেছেন char
এবং স্ট্রিংগুলি শিখেছেন তা সব ভুলে যান , কারণ একটি চরিত্র বাইট নয় । এই ধারণা দীর্ঘ অপ্রচলিত।
আপনি str
যখন পাঠ্য উপস্থাপন করতে চান তখন আপনি ব্যবহার করুন।
print('שלום עולם')
আপনি bytes
যখন স্ট্রকের মতো নিম্ন-স্তরের বাইনারি ডেটা উপস্থাপন করতে চান তখন আপনি ব্যবহার করুন ।
NaN = struct.unpack('>d', b'\xff\xf8\x00\x00\x00\x00\x00\x00')[0]
আপনি করতে পারেন এনকোড একটি str
একটি থেকে bytes
অবজেক্ট।
>>> '\uFEFF'.encode('UTF-8')
b'\xef\xbb\xbf'
এবং আপনি একটি bytes
মধ্যে ডিকোড করতে পারেন str
।
>>> b'\xE2\x82\xAC'.decode('UTF-8')
'€'
তবে আপনি অবাধে দুটি ধরণের মিশ্রিত করতে পারবেন না।
>>> b'\xEF\xBB\xBF' + 'Text with a UTF-8 BOM'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can't concat bytes to str
b'...'
স্বরলিপি কিছুটা মধ্যে বিভ্রান্তিকর এটা 0x01-0x7F বাইট হেক্স সংখ্যার পরিবর্তে ASCII অক্ষর দিয়ে চিহ্নিত করা যাবে যে হয়।
>>> b'A' == b'\x41'
True
তবে আমার অবশ্যই জোর দিতে হবে, একটি চরিত্র বাইট নয় ।
>>> 'A' == b'A'
False
পাইথন ২.x
পাইথনের প্রাক-3.0 সংস্করণগুলিতে পাঠ্য এবং বাইনারি ডেটার মধ্যে এই জাতীয় পার্থক্যের অভাব রয়েছে। পরিবর্তে, সেখানে ছিল:
unicode
= u'...'
আক্ষরিক = ইউনিকোড অক্ষরের ক্রম = 3.xstr
str
= '...'
আক্ষরিক = বিভ্রান্ত বাইট / অক্ষরের ক্রম
- সাধারণত পাঠ্য, কিছু অনির্দিষ্ট এনকোডিং এ এনকোড করা।
- তবে
struct.pack
আউটপুটের মতো বাইনারি ডেটা উপস্থাপন করতেও ব্যবহৃত হত ।
2.x-to-3.x রূপান্তরটি সহজ করার জন্য, পাঠ্য স্ট্রিংগুলি (যা 3-এ হওয়া উচিত) থেকে b'...'
বাইনারি স্ট্রিং (যা bytes
3.x হওয়া উচিত ) পৃথক করার জন্য আক্ষরিক সিনট্যাক্সটি পাইথন ২.6 এ ব্যাকপোর্ট করা হয়েছিল str
.এক্স). b
উপসর্গ 2.x কিছুই না, কিন্তু বলে 2to3
স্ক্রিপ্ট এটা 3.x. একটি ইউনিকোড স্ট্রিং রূপান্তর করতে না
সুতরাং হ্যাঁ, b'...'
পাইথনের আক্ষরিকের একই উদ্দেশ্য রয়েছে যা তারা পিএইচপি-তে করেন।
এছাড়াও, কৌতূহলের বাইরে, খ এবং ইউ এর চেয়ে আরও বেশি চিহ্ন রয়েছে যা অন্যান্য কাজ করে?
r
উপসর্গ একটি কাঁচা স্ট্রিং তৈরি করে (যেমন, r'\t'
একটি ব্যাকস্ল্যাশ + + হয় t
পরিবর্তে একটি ট্যাব), এবং ট্রিপল কোট '''...'''
বা """..."""
বহু-লাইন স্ট্রিং লিটারেল অনুমতি দেয়।