আসল প্রশ্ন সম্পূর্ণতা এক। আপনার ফাইল প্রসেসিং ফাইলটির সম্পূর্ণ প্রক্রিয়াজাতকরণ কাজ করে, বা এটি প্রক্রিয়াজাতকরণের ধাপগুলির একটি শৃঙ্খলে কেবল একটি টুকরা? যদি এটি সম্পূর্ণরূপে এবং এর নিজস্ব হয় তবে কোনও ফাংশনের মধ্যে সমস্ত ফাইল অ্যাক্সেসকে নির্দ্বিধায় নির্দ্বিধায় মনে করুন।
def ver(filepath):
with open(filepath, "r") as f:
# do processing steps on f
return result
with
বিবৃতিটির শেষে সম্পদ চূড়ান্ত করার (ফাইলটি বন্ধ করা) খুব সুন্দর সম্পত্তি এটি রয়েছে ।
তবে সেখানে সম্ভবত ইতিমধ্যেই খোলা ফাইল, তারপর আপনার এর পার্থক্য প্রক্রিয়াকরণের জন্য প্রয়োজন হয়, তাহলে ver_1
ও ver_2
আরো ইন্দ্রিয় তোলে। উদাহরণ স্বরূপ:
def _ver_file(f):
# do processing steps on f
return result
def ver(fileobj):
if isinstance(fileobj, str):
with open(fileobj, 'r') as f:
return _ver_file(f)
else:
return _ver_file(fileobj)
এই ধরণের সুস্পষ্ট ধরণের পরীক্ষার জন্য প্রায়শই জোর করে বোঝানো হয় , বিশেষত জাভা, জুলিয়া এবং গোয়ের মতো ভাষায় যেখানে টাইপ- বা ইন্টারফেস-ভিত্তিক প্রেরণ সরাসরি সমর্থিত is পাইথনে, তবে টাইপ-ভিত্তিক প্রেরণের জন্য কোনও ভাষা সমর্থন নেই। আপনি পাইথনে মাঝে মাঝে সরাসরি টাইপ-টেস্টিংয়ের সমালোচনা দেখতে পাবেন, তবে বাস্তবে এটি অত্যন্ত সাধারণ এবং বেশ কার্যকর। এটি একটি ফাংশনকে উচ্চতর ডিগ্রি অর্জনের জন্য সক্ষম করে, ডেটিটাইপগুলি যেভাবে আসতে পারে তা পরিচালনা করে, যেমন "হাঁসের টাইপিং"। শীর্ষস্থানীয় আন্ডারস্কোরটি নোট করুন _ver_file
; এটি একটি "ব্যক্তিগত" ফাংশন (বা পদ্ধতি) নির্ধারণ করার একটি প্রচলিত উপায়। যদিও এটি প্রযুক্তিগতভাবে সরাসরি বলা যেতে পারে, এটি প্রস্তাব দেয় যে ফাংশনটি সরাসরি বাহ্যিক ব্যবহারের জন্য নয়।
2019 আপডেট: প্রদত্ত পাইথন 3 সাম্প্রতিক আপডেট, উদাহরণস্বরূপ পাথ এখন সম্ভাব্য সংরক্ষণ করা হয় যে হিসাবে pathlib.Path
শুধু বস্তু str
বা bytes
(3.4+), এবং যে টাইপ হিন্টিং হচ্ছে (প্রায় 3.6+ যদিও এখনও সক্রিয়ভাবে নব্য) মূলধারার গূঢ় থেকে গেছে, এখানে আপডেট হওয়া কোড যা এই অগ্রগতিগুলিকে আমলে নেয়:
from pathlib import Path
from typing import IO, Any, AnyStr, Union
Pathish = Union[AnyStr, Path] # in lieu of yet-unimplemented PEP 519
FileSpec = Union[IO, Pathish]
def _ver_file(f: IO) -> Any:
"Process file f"
...
return result
def ver(fileobj: FileSpec) -> Any:
"Process file (or file path) f"
if isinstance(fileobj, (str, bytes, Path)):
with open(fileobj, 'r') as f:
return _ver_file(f)
else:
return _ver_file(fileobj)
your_function
ব্যবহার করা যেতে পারে।