পাইথন ৩.৩ থেকে আপনি মডিউল ExitStack
থেকে ক্লাসটি contextlib
নিরাপদে
সংখ্যক ফাইল খোলার জন্য ব্যবহার করতে পারেন ।
এটি প্রাসঙ্গিক-সচেতন অবজেক্টগুলির একটি গতিশীল সংখ্যক পরিচালনা করতে পারে, যার অর্থ এটি আপনি যদি কতগুলি ফাইল পরিচালনা করতে চলেছেন তা জানেন না তবে এটি বিশেষত কার্যকর প্রমাণিত হবে ।
প্রকৃতপক্ষে, ডকুমেন্টেশনে উল্লিখিত ক্যানোনিকাল ইউজ-কেস ফাইলগুলির গতিশীল সংখ্যা পরিচালনা করছে।
with ExitStack() as stack:
files = [stack.enter_context(open(fname)) for fname in filenames]
# All opened files will automatically be closed at the end of
# the with statement, even if attempts to open files later
# in the list raise an exception
আপনি যদি বিশদটিতে আগ্রহী হন তবে কীভাবে ExitStack
পরিচালনা করে তা ব্যাখ্যা করার জন্য এখানে একটি সাধারণ উদাহরণ রয়েছে :
from contextlib import ExitStack
class X:
num = 1
def __init__(self):
self.num = X.num
X.num += 1
def __repr__(self):
cls = type(self)
return '{cls.__name__}{self.num}'.format(cls=cls, self=self)
def __enter__(self):
print('enter {!r}'.format(self))
return self.num
def __exit__(self, exc_type, exc_value, traceback):
print('exit {!r}'.format(self))
return True
xs = [X() for _ in range(3)]
with ExitStack() as stack:
print(len(stack._exit_callbacks)) # number of callbacks called on exit
nums = [stack.enter_context(x) for x in xs]
print(len(stack._exit_callbacks))
print(len(stack._exit_callbacks))
print(nums)
আউটপুট:
0
enter X1
enter X2
enter X3
3
exit X3
exit X2
exit X1
0
[1, 2, 3]