প্রথমে, আমি পাইথনের লগিং কাঠামোর মনোনয়নে দ্বিতীয় করব । তবে আপনি কীভাবে এটি ব্যবহার করেন সে সম্পর্কে একটু সতর্ক থাকুন। বিশেষত: লগিং ফ্রেমওয়ার্কটি আপনার ভেরিয়েবলগুলি প্রসারিত করতে দিন, নিজে এটি করবেন না। উদাহরণস্বরূপ, পরিবর্তে:
logging.debug("datastructure: %r" % complex_dict_structure)
আপনি নিশ্চিত হন:
logging.debug("datastructure: %r", complex_dict_structure)
কারণ তারা দেখতে একই রকম, প্রথম সংস্করণটি অক্ষম করা সত্ত্বেও repr () ব্যয়কে অন্তর্ভুক্ত করে । দ্বিতীয় সংস্করণ এটি এড়ান। একইভাবে, আপনি যদি নিজের রোল করেন তবে আমি এমন কিছু প্রস্তাব দেব:
def debug_stdout(sfunc):
print(sfunc())
debug = debug_stdout
এর মাধ্যমে বলা হয়:
debug(lambda: "datastructure: %r" % complex_dict_structure)
যদি আপনি এটি করে অক্ষম করে দেন তবে ওভারহেড এড়াতে পারবেন:
def debug_noop(*args, **kwargs):
pass
debug = debug_noop
এই স্ট্রিংগুলি গণনা করার ওভারহেড সম্ভবত কোনও ব্যাপার নয় যতক্ষণ না সেগুলি হয় 1) গণনা করা ব্যয়বহুল বা 2) ডিবাগ স্টেটমেন্টটি একটি এন ^ 3 লুপ বা কোনও কিছুর মাঝখানে রয়েছে। আমি যে সম্পর্কে কিছু জানতে হবে না যে।