নিম্নলিখিতগুলিকে পছন্দ করার ঠিক এক কারণ রয়েছে:
with open('filename.txt') as fp:
for line in fp:
print line
আবর্জনা সংগ্রহের জন্য আমরা সিপিথনের অপেক্ষাকৃত নির্জনবাদী রেফারেন্স-কাউন্টিং স্কিম দ্বারা ক্ষতিগ্রস্থ হয়েছি। অন্য, পাইথনের অনুমানমূলক বাস্তবায়নগুলি withমেমরির দাবিদার করতে অন্য কোনও স্কিম ব্যবহার করে যদি অজানাভাবে "দ্রুত পর্যাপ্ত" ফাইলটি বন্ধ না করে ।
এ জাতীয় বাস্তবায়নে, আপনার কোডটি অনাথ ফাইল হ্যান্ডলগুলিতে চূড়ান্ত কলকারীদের চূড়ান্ত কল করার চেয়ে দ্রুত ওএস থেকে "খুব বেশি ফাইল খোলা" ত্রুটি পেতে পারে। সাধারণ কাজটি হ'ল জিসিকে তাত্ক্ষণিকভাবে ট্রিগার করা, তবে এটি একটি বাজে হ্যাক এবং এটি এমন প্রতিটি ফাংশন দ্বারা সম্পন্ন করা উচিত যা গ্রন্থাগারের মধ্যে থাকা ত্রুটির সম্মুখীন হতে পারে। কি একটা দুঃস্বপ্ন.
অথবা আপনি কেবল withব্লকটি ব্যবহার করতে পারেন ।
বোনাস প্রশ্ন
(যদি কেবল প্রশ্নের উদ্দেশ্যমূলক দিকগুলিতে আগ্রহী হন তবে এখনই পড়া বন্ধ করুন))
ফাইল আইটেমগুলির জন্য কেন এটিরেটর প্রোটোকলে অন্তর্ভুক্ত নেই?
এটি এপিআই ডিজাইন সম্পর্কে বিষয়গত প্রশ্ন, সুতরাং আমার দুটি অংশে বিষয়গত উত্তর রয়েছে।
অন্ত্র স্তরে, এটি ভুল অনুভব করে, কারণ এটি পুনরায় প্রোটোকল দুটি পৃথক কাজ করে lines লাইনগুলিতে পুনরাবৃত্তি করে এবং ফাইল হ্যান্ডেলটি বন্ধ করে দেয় — এবং প্রায়শই সরল চেহারা ফাংশনটি দুটি ক্রিয়া করা খারাপ ধারণা। এই ক্ষেত্রে, এটি বিশেষত খারাপ লাগে কারণ পুনরাবৃত্তকারীরা কোনও ফাইলের বিষয়বস্তুর সাথে একটি অর্ধ-কার্যকরী, মান ভিত্তিক উপায়ে সম্পর্কিত, তবে ফাইল হ্যান্ডলগুলি পরিচালনা করা একটি সম্পূর্ণ পৃথক কাজ। দু'টিকেই অদৃশ্যভাবে একটি অ্যাকশনে স্কোয়াশ করা বিস্ময়কর যে এই কোডটি পড়ে এবং প্রোগ্রাম আচরণ সম্পর্কে যুক্তিযুক্ত হওয়া আরও কঠিন করে তোলে।
অন্যান্য ভাষাও মূলত একই সিদ্ধান্তে এসেছে। হাস্কেল সংক্ষেপে তথাকথিত "অলস আইও" দিয়ে ফ্লার্ট করেছিলেন যা আপনাকে কোনও ফাইলের উপরে পুনরাবৃত্তি করতে দেয় এবং প্রবাহের শেষে পৌঁছালে এটি স্বয়ংক্রিয়ভাবে বন্ধ হয়ে যায় তবে আজকাল হাস্কেলের অলস আইও ব্যবহার করা প্রায় সর্বজনীনভাবে নিরুত্সাহিত, এবং হাস্কেল ব্যবহারকারীরা বেশিরভাগ কন্ডুইটের মতো আরও সুস্পষ্ট সংস্থান পরিচালনায় চলে এসেছেন যা withপাইথনের ব্লকের মতো আচরণ করে ।
প্রযুক্তিগত স্তরে, পাইথনের একটি ফাইল হ্যান্ডেল নিয়ে আপনি কিছু কাজ করতে চাইতে পারেন যা পুনরুক্তি ফাইল হ্যান্ডেলটি বন্ধ করে দিলে কাজ করবে না। উদাহরণস্বরূপ, ধরুন আমার দুবার ফাইলটি পুনরাবৃত্তি করতে হবে:
with open('filename.txt') as fp:
for line in fp:
...
fp.seek(0)
for line in fp:
...
যদিও এটি একটি সাধারণ ব্যবহারের ক্ষেত্রে কম তবে এই বিষয়টি বিবেচনা করুন যে আমি সম্ভবত বিদ্যমান কোড বেসে নীচের দিকে কোডের তিনটি লাইন যুক্ত করেছি যা মূলত শীর্ষে তিনটি রেখা ছিল। যদি পুনরাবৃত্তি ফাইলটি বন্ধ করে দেয় তবে আমি এটি করতে সক্ষম হব না। সুতরাং পুনরাবৃত্তি এবং রিসোর্স ম্যানেজমেন্ট পৃথক রাখার ফলে কোডের কিছু অংশকে একটি বৃহত, কার্যকরী পাইথন প্রোগ্রামে রচনা করা সহজ করে তোলে।
যৌগিকতা কোনও ভাষা বা এপিআইর অন্যতম গুরুত্বপূর্ণ ব্যবহারযোগ্যতা বৈশিষ্ট্য।