পাইথনের মতো স্ট্রিং ক্লাস কি StringBuilderসি # এর মতো?
পাইথনের মতো স্ট্রিং ক্লাস কি StringBuilderসি # এর মতো?
উত্তর:
ওয়ান-টু ওয়ান পারস্পরিক সম্পর্ক নেই। সত্যিই একটি ভাল নিবন্ধের জন্য দয়া করে পাইথনে দক্ষ স্ট্রিং কনটেনটেশন দেখুন :
পাইথন প্রোগ্রামিং ল্যাঙ্গুয়েজে দীর্ঘ স্ট্রিং তৈরি করার ফলে অনেক সময় খুব ধীর চলমান কোডের ফলাফল আসতে পারে। এই নিবন্ধে আমি বিভিন্ন স্ট্রিং সংমিশ্রণ পদ্ধতিগুলির গণ্য কর্মক্ষমতা তদন্ত করি।
আমি অলিভার ক্রের কোডটি ব্যবহার করেছি (অ্যান্ড্রু হারের দেওয়া লিঙ্ক) এবং এটি পাইথন ২..3.৩ এর সাথে কিছুটা মানিয়ে নিয়েছি। (টাইমিট প্যাকেজ ব্যবহার করে)। আমি আমার ব্যক্তিগত কম্পিউটার, লেনোভো টি 61১, GB জিবি র্যাম, দেবিয়ান জিএনইউ / লিনাক্স .0.০. ((স্কিজে) দৌড়েছি।
10,000 টি পুনরাবৃত্তির ফলাফল এখানে:
পদ্ধতি 1: 0.0538418292999 সেকেন্ড প্রক্রিয়া আকার 4800 কেবি পদ্ধতি 2: 0.22602891922 সেকেন্ড প্রক্রিয়া আকার 4960 কেবি পদ্ধতি 3: 0.0605459213257 সেকেন্ড প্রক্রিয়া আকার 4980 কেবি পদ্ধতি 4: 0.0544030666351 সেকেন্ড প্রক্রিয়া আকার 5536 কেবি পদ্ধতি 5: 0.0551080703735 সেকেন্ড প্রক্রিয়া আকার 5272 কেবি পদ্ধতি 6: 0.0542731285095 সেকেন্ড প্রক্রিয়া আকার 5512 কেবি
এবং 5,000,000 পুনরাবৃত্তির জন্য (পদ্ধতি 2 উপেক্ষা করা হয়েছে কারণ এটি চিরতরের মতো ধীরে ধীরে চলেছে):
পদ্ধতি 1: 5.88603997231 সেকেন্ড প্রক্রিয়া আকার 37976 কেবি পদ্ধতি 3: 8.40748500824 সেকেন্ড প্রক্রিয়া আকার 38024 কেবি পদ্ধতি 4: 7.96380496025 সেকেন্ড প্রক্রিয়া আকার 321968 কেবি পদ্ধতি 5: 8.03666186333 সেকেন্ড প্রক্রিয়া আকার 71720 কেবি পদ্ধতি 6: 6.68192911148 সেকেন্ড প্রক্রিয়া আকার 38240 কেবি
এটা একেবারেই স্পষ্ট যে পাইথন ছেলেরা স্ট্রিং কনটেনটেশনকে অনুকূলকরণ করতে দুর্দান্ত কাজ করেছে, এবং হোয়ের যেমন বলেছিলেন: "অকালীন অপটিমাইজেশন হ'ল সমস্ত দুষ্টের মূল" :-)
সংকলক অপ্টিমাইজেশনের উপর নির্ভর করা ভঙ্গুর। এন্টোইন-ট্রান প্রদত্ত স্বীকৃত উত্তর এবং সংখ্যার সাথে যুক্ত বেঞ্চমার্কগুলি বিশ্বাসযোগ্য নয়। অ্যান্ড্রু হরে একটি কলকে অন্তর্ভুক্ত করার ভুল করেrepr তার পদ্ধতিগুলিতেএটি সমস্ত পদ্ধতিকে সমানভাবে ধীর করে দেয় তবে স্ট্রিং তৈরিতে প্রকৃত জরিমানাটিকে অস্পষ্ট করে।
ব্যবহার join। এটি খুব দ্রুত এবং আরও শক্তিশালী।
$ ipython3
Python 3.5.1 (default, Mar 2 2016, 03:38:02)
IPython 4.1.2 -- An enhanced Interactive Python.
In [1]: values = [str(num) for num in range(int(1e3))]
In [2]: %%timeit
...: ''.join(values)
...:
100000 loops, best of 3: 7.37 µs per loop
In [3]: %%timeit
...: result = ''
...: for value in values:
...: result += value
...:
10000 loops, best of 3: 82.8 µs per loop
In [4]: import io
In [5]: %%timeit
...: writer = io.StringIO()
...: for value in values:
...: writer.write(value)
...: writer.getvalue()
...:
10000 loops, best of 3: 81.8 µs per loop
reprকলটি রানটাইমের উপরে কর্তৃত্ব করে, তবে ভুলটিকে ব্যক্তিগত করার দরকার নেই।
পাইথনের বেশ কয়েকটি জিনিস রয়েছে যা একই ধরনের উদ্দেশ্যগুলি পূরণ করে:
list(your_string)করতে পারেন You এছাড়াও আপনি এটির জন্য একটি ব্যবহার করতে পারেন UserString.MutableString।(c)StringIO.StringIO এমন জিনিসগুলির জন্য দরকারী যা অন্যথায় একটি ফাইল নেবে, তবে সাধারণ স্ট্রিং বিল্ডিংয়ের জন্য কম।উপরে থেকে পদ্ধতি 5 ব্যবহার করে (সিউডো ফাইল) আমরা খুব ভাল পারফ এবং নমনীয়তা পেতে পারি
from cStringIO import StringIO
class StringBuilder:
_file_str = None
def __init__(self):
self._file_str = StringIO()
def Append(self, str):
self._file_str.write(str)
def __str__(self):
return self._file_str.getvalue()
এখন এটি ব্যবহার
sb = StringBuilder()
sb.Append("Hello\n")
sb.Append("World")
print sb
আপনি স্ট্রিংআইও বা সিস্ট্রিংআইও চেষ্টা করতে পারেন
এখানে কোন স্পষ্টভাবে অ্যানালগ নেই - আমার ধারণা আপনি স্ট্রিং কনটেনটেশন (সম্ভবত পূর্বে যেমনটি অনুকূলিত হয়েছেন) বা তৃতীয় পক্ষের শ্রেণি ব্যবহার করবেন বলে আশা করা হচ্ছে (আমি সন্দেহ করি যে তারা অনেক বেশি দক্ষ - পাইথনের তালিকাগুলি গতিশীল টাইপযুক্ত তাই দ্রুত কাজ নয়) গৃহীত হিসাবে বাফারের জন্য চর []) স্ট্রিংবিল্ডার-জাতীয় ক্লাসগুলি অকালীন অপ্টিমাইজেশন নয় কারণ অনেক ভাষায় স্ট্রিংয়ের স্বভাবগত বৈশিষ্ট্য রয়েছে (অপরিবর্তনযোগ্যতা) - যা অনেকগুলি অপ্টিমাইজেশনের অনুমতি দেয় (উদাহরণস্বরূপ, টুকরা / সাবস্ট্রিংয়ের জন্য একই বাফারকে উল্লেখ করে)। স্ট্রিংবিল্ডার / স্ট্রিংবফার / স্ট্রিংস্ট্রিম-এর মতো ক্লাসগুলি স্ট্রাকচারিং স্ট্রিংগুলির তুলনায় অনেক বেশি দ্রুত কাজ করে (অনেকগুলি ছোট অস্থায়ী বস্তু উত্পাদন করে যা এখনও বরাদ্দ এবং আবর্জনা সংগ্রহের প্রয়োজন) এবং এমনকি স্ট্রিং ফর্ম্যাটিং প্রিন্টফ-জাতীয় সরঞ্জামগুলির প্রয়োজন নেই, যার জন্য বিন্যাসের বিন্যাসের প্যাটার্ন ওভারহেডের জন্য যথেষ্ট ব্যবহারযোগ্য ফর্ম্যাট কল অনেক।
যদি আপনি এখানে পাইথনে একটি দ্রুত স্ট্রিং সংক্ষেপণ পদ্ধতি সন্ধান করছেন তবে আপনার বিশেষ স্ট্রিংবিল্ডার শ্রেণির প্রয়োজন হবে না। সি # তে দেখা পারফরম্যান্স পেনাল্টি ছাড়াই সাধারণ কনটেক্সটেশন ঠিক পাশাপাশি কাজ করে।
resultString = ""
resultString += "Append 1"
resultString += "Append 2"
পারফরম্যান্স ফলাফলের জন্য এন্টোইন-ট্রান এর উত্তর দেখুন