আমি মনে করি যে প্রতিটিটির ব্যবহার আমার পক্ষে তাতে প্রবেশের পক্ষে খুব বিষয়গত, সুতরাং আমি কেবল সংখ্যায় আটকে থাকব।
আমি ডিক, একটি নতুন_স্টাইল শ্রেণি এবং স্লট সহ একটি নতুন_স্টাইল শ্রেণিতে একটি ভেরিয়েবল তৈরি করতে এবং পরিবর্তন করতে যে সময় লাগে তার সাথে তুলনা করেছি।
এটি পরীক্ষার জন্য আমি যে কোডটি ব্যবহার করেছি তা এখানে (এটি কিছুটা অগোছালো তবে এটি কাজটি করে))
import timeit
class Foo(object):
def __init__(self):
self.foo1 = 'test'
self.foo2 = 'test'
self.foo3 = 'test'
def create_dict():
foo_dict = {}
foo_dict['foo1'] = 'test'
foo_dict['foo2'] = 'test'
foo_dict['foo3'] = 'test'
return foo_dict
class Bar(object):
__slots__ = ['foo1', 'foo2', 'foo3']
def __init__(self):
self.foo1 = 'test'
self.foo2 = 'test'
self.foo3 = 'test'
tmit = timeit.timeit
print 'Creating...\n'
print 'Dict: ' + str(tmit('create_dict()', 'from __main__ import create_dict'))
print 'Class: ' + str(tmit('Foo()', 'from __main__ import Foo'))
print 'Class with slots: ' + str(tmit('Bar()', 'from __main__ import Bar'))
print '\nChanging a variable...\n'
print 'Dict: ' + str((tmit('create_dict()[\'foo3\'] = "Changed"', 'from __main__ import create_dict') - tmit('create_dict()', 'from __main__ import create_dict')))
print 'Class: ' + str((tmit('Foo().foo3 = "Changed"', 'from __main__ import Foo') - tmit('Foo()', 'from __main__ import Foo')))
print 'Class with slots: ' + str((tmit('Bar().foo3 = "Changed"', 'from __main__ import Bar') - tmit('Bar()', 'from __main__ import Bar')))
এবং এখানে আউটপুট ...
তৈরি হচ্ছে ...
Dict: 0.817466186345
Class: 1.60829183597
Class_with_slots: 1.28776730003
একটি পরিবর্তনশীল পরিবর্তন করা হচ্ছে ...
Dict: 0.0735140918748
Class: 0.111714198313
Class_with_slots: 0.10618612142
সুতরাং, যদি আপনি কেবল ভেরিয়েবলগুলি সংরক্ষণ করেন তবে আপনার গতি প্রয়োজন, এবং এটির জন্য আপনাকে অনেকগুলি গণনা করার প্রয়োজন হবে না, আমি ডিক ব্যবহার করার পরামর্শ দিই (আপনি সবসময় কেবল কোনও পদ্ধতির মতো দেখতে একটি ফাংশন তৈরি করতে পারেন)। তবে, যদি আপনার সত্যিই ক্লাসের প্রয়োজন হয় তবে মনে রাখবেন - সর্বদা __ স্লট __ ব্যবহার করুন ।
বিঃদ্রঃ:
দু'জনের সাথেই 'ক্লাস' টেস্ট করেছি স্টাইল এবং ওল্ড স্টাইল ক্লাস দিয়েই । দেখা যাচ্ছে যে ওল্ড স্টাইলের ক্লাসগুলি তৈরি করা আরও দ্রুত তবে সংশোধন করার জন্য ধীর (যদি আপনি একটি টান লুপে প্রচুর ক্লাস তৈরি করেন তবে তা তাত্পর্যপূর্ণ নয় তবে গুরুত্বপূর্ণ (টিপ: আপনি এটি ভুল করছেন))।
ভেরিয়েবলগুলি তৈরি এবং পরিবর্তন করার সময়গুলি আপনার কম্পিউটারে পৃথক হতে পারে যেহেতু খনিটি পুরানো এবং ধীর। নিশ্চিত হয়ে নিন যে আপনি 'আসল' ফলাফলগুলি দেখতে এটি নিজেই পরীক্ষা করেন।
সম্পাদনা করুন:
পরে আমি নেমটুপলটি পরীক্ষা করেছিলাম: আমি এটিকে পরিবর্তন করতে পারি না তবে 10000 নমুনা তৈরি করতে (বা এর মতো কিছু) লাগে এটিতে 1.4 সেকেন্ড লেগেছিল তাই অভিধানটি প্রকৃতপক্ষে দ্রুততম।
আমি যদি কী এবং মানগুলি অন্তর্ভুক্ত করার জন্য ডিক ফাংশনটি পরিবর্তন করি এবং আমি যখন এটি তৈরি করি ডিকটি যুক্ত ভেরিয়েবলের পরিবর্তে ডিকটি ফিরিয়ে আনি তবে এটি আমাকে 0.8 সেকেন্ডের পরিবর্তে 0.65 দেয় ।
class Foo(dict):
pass
তৈরি করা স্লট সহ একটি শ্রেণীর মতো এবং ভেরিয়েবল পরিবর্তন করা সবচেয়ে ধীর (0.17 সেকেন্ড) তাই এই ক্লাসগুলি ব্যবহার করবেন না । ডিক (গতি) বা অবজেক্ট ('সিনট্যাক্স ক্যান্ডি') থেকে প্রাপ্ত ক্লাসের জন্য যান
dict
বোঝা যায়, করতে পারে। ঝরঝরে সুবিধা: আপনি যখন ডিবাগ করবেন তখন কেবল বলুনprint(request)
এবং আপনি সহজেই সমস্ত রাজ্যের তথ্য দেখতে পাবেন। আরও ধ্রুপদী পদ্ধতির সাথে আপনাকে আপনার কাস্টম__str__
পদ্ধতিগুলি লিখতে হবে , যা আপনাকে যদি সারাক্ষণ এটি করতে হয় তবে সফল হয়।