পাইথন স্ট্রিংয়ের আগে আব উপসর্গটির অর্থ কী?


107

পাইথনের সোর্স কোডে আমি হোঁচট খেয়েছি আমি এর মতো স্ট্রিংয়ের আগে একটি ছোট বি দেখেছি :

b"abcdef"

আমি uএকটি ইউনিকোড স্ট্রিং বোঝাতে rউপসর্গ এবং কাঁচা স্ট্রিং আক্ষরিক জন্য উপসর্গ সম্পর্কে জানি ।

bকোন উপসর্গ ছাড়াই একেবারে সরল স্ট্রিংয়ের মতো বলে মনে হচ্ছে এটি কোন ধরণের সোর্স কোডটির জন্য কী এবং কীভাবে কার্যকর ?


10
@SLott: লিঙ্ক আপনার দেওয়া দেখা হবে খ প্রিফিক্স অনুসরণ না স্ট্রিং উপসর্গ অনুমতিপ্রাপ্ত ... 2.6 (উল্লেখের উপাদানে একটি ছোটখাট ত্রুটি মত দেখায়) জন্য। এবং এই জাতীয় জিনিস সম্পর্কে গুগল করা সহজ নয়। আমি "বি পাইথন স্ট্রিং উপসর্গ" এর মতো কীওয়ার্ড চেষ্টা করেছিলাম এবং মূলত কোথাও পাই না।
ক্রিসস

এস.লোট ব্যবহৃত লিঙ্কটি একটি সংস্করণ নির্দিষ্টকারী অনুপস্থিত; এটি পাইথন 3: docs.python.org/3/references/… সম্পর্কে । উপসর্গটি এখন পাইথন ২.6 এও সমর্থন করে এবং ক্রস-সংস্করণ পাইথন কোডটি সহজতর করে তোলে।
মার্টিজন পিটারস

1
এই প্রশ্নটি "হুবহু সদৃশ" বা প্রশ্নের উত্তর নয় "আমার মুদ্রণ বিবৃতিতে আমি কী এই 'বি' চরিত্রটি থেকে মুক্তি পেতে পারি?" stackoverflow.com/questions/42599851/... আপনি যে দয়া করে marijin চিহ্ন মুক্ত করার কিছু মনে করবে? যে ব্যক্তি জিজ্ঞাসা করেছিল সেই ব্যক্তি এবং যে ব্যক্তি প্রকৃতপক্ষে একটি উত্তর চেষ্টা করেছিল সে প্রকৃত প্রশ্নের উত্থাপিত প্রশ্নের উত্তর পেতে সক্ষম হতে পারে appreciate
me_

উত্তর:


62

এটি পাইথন 3 bytes আক্ষরিক । এই উপসর্গটি পাইথন 2.5 এবং এর চেয়েও পুরনো ক্ষেত্রে অনুপস্থিত (এটি 2.x এর একটি সরল স্ট্রিংয়ের সমতুল্য, যখন 3.x এর সরল স্ট্রিংটি u2.x প্রিফিক্স সহ আক্ষরিক সমতুল্য )। পাইথন ২.6++ এ এটি 3.x এর সাথে সামঞ্জস্য করার জন্য একটি সরল স্ট্রিংয়ের সমতুল্য ।


@ ওআরআরআর: পাইথনটি ২.6 কোডে ছিলাম আমি এটি দেখেছি বলে মনে হয় এটি পাইথন ২. in এ প্রবর্তিত হয়েছিল
ক্রিসস

পোস্ট করার আগে আমি এটি ২.
Html#

1
ঠিক আছে, "ভবিষ্যতের সামঞ্জস্যের জন্য, পাইথন ২." স্ট্রিং টাইপের প্রতিশব্দ হিসাবে বাইট যুক্ত করে এবং এটি "নতুন কী" থেকে "বি 'স্বরলিপি সমর্থন করে।
WRAR

উপরের লিঙ্কগুলি এখন ২.7 রেফারেন্সকে নির্দেশ করে এবং বি উপসর্গ যুক্ত করা হয়েছিল, এখানে পুরানো বগুসের
২..8.৮ /

98

bউপসর্গ একটি প্রকাশ করে bytesস্ট্রিং আক্ষরিক

আপনি যদি পাইথন 3 উত্স কোডে এটি ব্যবহার করে দেখেন, অভিব্যক্তিটি কোনও নিয়মিত ইউনিকোড অবজেক্ট নয়, একটি bytesঅবজেক্ট তৈরি করে । আপনি যদি এটি দেখতে পান যে এটি আপনার পাইথন শেলটিতে বা কোনও তালিকার অংশ হিসাবে, ডিক্ট বা অন্যান্য ধারক সামগ্রীর অংশ হিসাবে প্রতিপন্ন হয় তবে আপনি এই চিহ্নটি ব্যবহার করে প্রতিনিধিত্ব করা কোনও বস্তু দেখতে পাবেন ।strbytes

bytesঅবজেক্টগুলিতে মূলত 0-255 ব্যাপ্তির মধ্যে পূর্ণসংখ্যার ক্রম থাকে, তবে উপস্থাপিত হলে পাইথন এই বাইটগুলি এএসসিআইআই কোডপয়েন্ট হিসাবে প্রদর্শন করে যাতে তাদের বিষয়বস্তু পড়া সহজ হয়। বাইরে কোনো বাইট মুদ্রণযোগ্য ASCII অক্ষর পরিসীমা পালাবার ক্রম (যেমন হিসাবে দেখানো হয় \n, \x82ইত্যাদি)। বিপরীতভাবে, আপনি বাইট মানগুলি সংজ্ঞায়িত করতে ASCII অক্ষর এবং এস্কেপ ক্রম দুটি ব্যবহার করতে পারেন; ASCII মানগুলির জন্য তাদের সংখ্যাসূচক মান ব্যবহৃত হয় (যেমন b'A'== b'\x41')

যেহেতু কোনও bytesঅবজেক্টটি পূর্ণসংখ্যার ক্রম সমন্বিত থাকে, আপনি bytes0-255 রেঞ্জের মানগুলির সাথে, কোনও তালিকার মতো মানগুলির সাথে সংখ্যার অন্য কোনও ক্রম থেকে কোনও অবজেক্ট তৈরি করতে পারেন :

bytes([72, 101, 108, 108, 111])

এবং ইন্ডেক্স আপনি পূর্ণসংখ্যার ফিরিয়ে দেয় (কিন্তু slicing একটি নতুন উত্পাদন করে bytesমান; উপরে উদাহরণস্বরূপ, value[0]আপনি দেয় 72, কিন্তু value[:1]হয় b'H'যেমন 72 বড় হাতের অক্ষর জন্য ASCII কোড বিন্দু এইচ )।

bytesএনকোডযুক্ত পাঠ্য সহ মডেল বাইনারি ডেটা । যদি আপনার মানটিতে পাঠ্য থাকে তবে আপনাকে প্রথমে সঠিক কোডেক ব্যবহার করে ডিকোড করতে হবে। যদি ডেটাটি ইউটিএফ -8 হিসাবে এনকোড করা থাকে, উদাহরণস্বরূপ, আপনি এর সাথে একটি ইউনিকোড মান পেতে পারেন :bytesstr

strvalue = bytesvalue.decode('utf-8')

বিপরীতে, কোনও strবস্তুর পাঠ্য থেকে যেতে bytesআপনাকে এনকোড করতে হবে । ব্যবহারের জন্য আপনাকে কোনও এনকোডিংয়ের বিষয়ে সিদ্ধান্ত নেওয়া দরকার; ডিফল্টটি ইউটিএফ -8 ব্যবহার করা হয় তবে আপনার যা প্রয়োজন তা আপনার ব্যবহারের ক্ষেত্রে অত্যন্ত নির্ভরশীল:

bytesvalue = strvalue.encode('utf-8')

আপনি একই কাজ করতে কনস্ট্রাক্টরও ব্যবহার করতে পারেন bytes(strvalue, encoding)

ডিকোডিং এবং এনকোডিং উভয় পদ্ধতিই ত্রুটিগুলি কীভাবে পরিচালনা করা উচিত তা নির্দিষ্ট করতে একটি অতিরিক্ত যুক্তি গ্রহণ করে ।

পাইথন 2, সংস্করণ 2.6 এবং 2.7 এছাড়াও b'..'পাইথন 2 এবং 3 উভয় ক্ষেত্রে কাজ করে এমন কোডটি স্বাচ্ছন্দ্যে স্ট্রিং আক্ষরিক সিনট্যাক্স ব্যবহার করে স্ট্রিং লিটারাল তৈরি সমর্থন করে ।

bytesstrস্ট্রিংগুলির মতো অবজেক্টগুলিও অপরিবর্তনীয় । যদি আপনার কোনও মিউটেটেবল বাইট মান প্রয়োজন হয় তবে একটি bytearray()অবজেক্ট ব্যবহার করুন ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.