ইন পাইথন , নিম্নলিখিত শুধুমাত্র উপাদানের নম্বর পেতে উপায় নেই?
arr.__len__()
যদি তা হয় তবে আজব সিনট্যাক্স কেন?
ইন পাইথন , নিম্নলিখিত শুধুমাত্র উপাদানের নম্বর পেতে উপায় নেই?
arr.__len__()
যদি তা হয় তবে আজব সিনট্যাক্স কেন?
উত্তর:
my_list = [1,2,3,4,5]
len(my_list)
# 5
টিপলসগুলির জন্য একই কাজ করে:
my_tuple = (1,2,3,4,5)
len(my_tuple)
# 5
এবং স্ট্রিংগুলি যা কেবলমাত্র অক্ষরের অ্যারে:
my_string = 'hello world'
len(my_string)
# 11
এটি ইচ্ছাকৃতভাবে এইভাবে করা হয়েছিল যাতে তালিকাগুলি, টিপলস এবং অন্যান্য ধারক প্রকার বা পুনরাবৃত্ত সকলকে স্পষ্টভাবে কোনও পাবলিক .length()
পদ্ধতি বাস্তবায়নের প্রয়োজন হয় না , পরিবর্তে আপনি কেবল len()
'যাদু' __len__()
পদ্ধতি প্রয়োগ করে এমন কোনও কিছুর পরীক্ষা করতে পারেন ।
অবশ্যই, এটি অপ্রয়োজনীয় মনে হতে পারে, তবে দৈর্ঘ্য পরীক্ষার বাস্তবায়নগুলি একই ভাষার মধ্যেও যথেষ্ট পরিবর্তিত হতে পারে। কোনও সংগ্রহের ধরণটি কোনও .length()
পদ্ধতি ব্যবহার করার সময় অন্য ধরণের কোনও .length
সম্পত্তি ব্যবহার করার বিষয়টি দেখতে অস্বাভাবিক নয় , আবার অন্যটি ব্যবহার করে .count()
। একটি ভাষা-স্তরের কীওয়ার্ড থাকা এই সমস্ত ধরণের প্রবেশের বিন্দুকে এক করে দেয়। সুতরাং এমনকি উপাদানগুলির তালিকা হিসাবে আপনি বিবেচনা নাও করতে পারেন এমন বস্তুগুলি এখনও দৈর্ঘ্য-পরীক্ষিত হতে পারে। এর মধ্যে স্ট্রিং, সারি, গাছ ইত্যাদি রয়েছে
এর কার্যকরী প্রকৃতি len()
প্রোগ্রামিংয়ের কার্যকরী শৈলীতে নিজেকে ভাল ধার দেয়।
lengths = map(len, list_of_containers)
আপনি যেভাবে কোনও কিছুর দৈর্ঘ্য নিচ্ছেন যার জন্য এটি বোঝা যায় (একটি তালিকা, অভিধান, টিপল, স্ট্রিং, ...) len
এটিতে কল করা is
l = [1,2,3,4]
s = 'abcde'
len(l) #returns 4
len(s) #returns 5
"অদ্ভুত" সিনট্যাক্সের কারণটি হল অভ্যন্তরীণভাবে পাইথন অনুবাদ len(object)
করে object.__len__()
। এটি যে কোনও বস্তুর জন্য প্রযোজ্য। সুতরাং, যদি আপনি কিছু শ্রেণি সংজ্ঞায়িত করে থাকেন এবং এটির দৈর্ঘ্য হওয়ার জন্য এটি বোঝা যায় __len__()
তবে এটির উপর কোনও পদ্ধতি নির্ধারণ করুন এবং তারপরে কেউ len
those দৃষ্টান্তগুলিতে কল করতে পারে ।
পাইথন ব্যবহার হাঁস টাইপিং : এটা কি একটি বস্তু সম্পর্কে গ্রাহ্য না করে হয় , যতদিন এটা হাতে এ পরিস্থিতির জন্য উপযুক্ত ইন্টারফেস আছে হিসাবে। আপনি যখন কোনও অবজেক্টে বিল্ট-ইন ফাংশন লেন () কল করেন, আপনি আসলে এর অভ্যন্তরীণ __len__ পদ্ধতি কল করছেন। একটি কাস্টম অবজেক্ট এই ইন্টারফেসটি বাস্তবায়ন করতে পারে এবং লেন () উত্তরটি ফিরিয়ে দেবে, এমনকি যদি বস্তুটি ধারণাগতভাবে সিকোয়েন্স না হয়।
ইন্টারফেসের সম্পূর্ণ তালিকার জন্য, এখানে একবার দেখুন: http://docs.python.org/references/datamodel.html#basic-customization
len(arr)
অ্যারের দৈর্ঘ্য পেতে আপনি পূর্ববর্তী উত্তরের পরামর্শ অনুযায়ী ব্যবহার করতে পারেন । আপনি যদি 2D অ্যারের মাত্রা চান তবে আপনি arr.shape
রিটার্নগুলির উচ্চতা এবং প্রস্থ ব্যবহার করতে পারেন
len(list_name)
ফাংশন প্যারামিটার হিসাবে তালিকা গ্রহণ করে এবং এটি তালিকার __len__()
ফাংশনটিকে কল করে।
পাইথন ব্যবহারকারীদের যেমন অন্যান্য ছেলেরা বলেছেন, তেমন ধারাবাহিকতার len()
পরিবর্তে ব্যবহারকারীদের ব্যবহার করার পরামর্শ দেয় __len__()
। তবে আরও কিছু সুবিধা রয়েছে:
কিছু বিল্ট-ইন মত ধরনের list
, str
, bytearray
ইত্যাদি, এর Cython বাস্তবায়ন len()
একটি শর্টকাট লাগে। এটি সরাসরি ob_size
সি কাঠামোয় ফিরে আসে , যা কল করার চেয়ে দ্রুত __len__()
।
আপনি যদি এই জাতীয় বিবরণে আগ্রহী হন, আপনি লুসিয়ানো রামালহোর "ফ্লাইট পাইথন" নামক বইটি পড়তে পারেন। এতে অনেক আকর্ষণীয় বিশদ রয়েছে এবং পাইথনকে আরও গভীরভাবে বুঝতে আপনাকে সহায়তা করতে পারে।