অ্যার।


উত্তর:


1228
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)

8
লেন () একটি ভাষা আদেশ, __len __ () ধারক প্রকারের একটি পদ্ধতি।
সোভিয়েট

33
লেন () একটি গ্লোবাল, বিল্টিন ফাংশন; __len __ () এমন একটি পদ্ধতি যা অবজেক্ট বাস্তবায়ন করতে পারে। লেন (ফু) সাধারণত ফু বলা শুরু করে __। লেন __ ()।
টিম লেশার

13
আপনি উল্লেখ করেছেন যে লেন সরবরাহ করে () প্রতিটি ধারককে একটি দৈর্ঘ্য () পদ্ধতি প্রয়োগ করতে হবে না, তবে এটি কীভাবে আলাদা, যদি প্রতিটি প্রকার এখনও লেন () যেকোনভাবে কল করে তবেই __len __ () পদ্ধতি প্রয়োগ করে? বিভিন্ন ধারক প্রকার লেন () দ্বারা আলাদাভাবে পরিচালিত হয়?
সাইমন বি জেনসেন

10
@ সিমন: "। দৈর্ঘ্য () প্রয়োগের প্রয়োজন নেই" সম্পর্কে বিট বিভ্রান্তিকর। ধারক প্রকারগুলির এখনও তাদের দৈর্ঘ্য ফেরত দেওয়ার জন্য একটি পদ্ধতি প্রয়োগ করা প্রয়োজন; মুল বক্তব্যটি হ'ল এটি একটি প্রমিত প্রোটোকল, অ্যাড-হক পদ্ধতি নয় যা আপনাকে প্রতিটি ধরণের সন্ধান করতে হবে। ডাবল-আন্ডারস্কোরগুলি এটি বোঝায়।
কার্ল মায়ার

16
আমি কার্ল মেয়ারের সাথে একমত - এই বলে যে একটি প্রকাশ্য দৈর্ঘ্য () পদ্ধতি বিভ্রান্তিকর এবং এর মূল-অর্থটি ভুল, "স্পষ্টভাবে প্রয়োগ করার দরকার নেই"। যে কোনও কিছুতে এখনও লেন বাস্তবায়ন করতে হবে এবং লেন ফাংশনটিকে অবরুদ্ধ করে - যা কিছু তারা নিজের নামের মতো দৈর্ঘ্য পদ্ধতিটি সর্বদা কার্যকর করতে পারে। তাই সত্যিই আমি এটিকে কিছু স্বেচ্ছাচারী অদ্ভুততা হিসাবে দেখি যা গুডো বিশ্বকে কীভাবে দেখে with এটির কোনও সার্বজনীন যুক্তির সাথে সম্ভবত কোনও সম্পর্ক নেই।
বিটি

52

আপনি যেভাবে কোনও কিছুর দৈর্ঘ্য নিচ্ছেন যার জন্য এটি বোঝা যায় (একটি তালিকা, অভিধান, টিপল, স্ট্রিং, ...) lenএটিতে কল করা is

l = [1,2,3,4]
s = 'abcde'
len(l) #returns 4
len(s) #returns 5

"অদ্ভুত" সিনট্যাক্সের কারণটি হল অভ্যন্তরীণভাবে পাইথন অনুবাদ len(object)করে object.__len__()। এটি যে কোনও বস্তুর জন্য প্রযোজ্য। সুতরাং, যদি আপনি কিছু শ্রেণি সংজ্ঞায়িত করে থাকেন এবং এটির দৈর্ঘ্য হওয়ার জন্য এটি বোঝা যায় __len__()তবে এটির উপর কোনও পদ্ধতি নির্ধারণ করুন এবং তারপরে কেউ lenthose দৃষ্টান্তগুলিতে কল করতে পারে ।


23

পাইথন ব্যবহার হাঁস টাইপিং : এটা কি একটি বস্তু সম্পর্কে গ্রাহ্য না করে হয় , যতদিন এটা হাতে এ পরিস্থিতির জন্য উপযুক্ত ইন্টারফেস আছে হিসাবে। আপনি যখন কোনও অবজেক্টে বিল্ট-ইন ফাংশন লেন () কল করেন, আপনি আসলে এর অভ্যন্তরীণ __len__ পদ্ধতি কল করছেন। একটি কাস্টম অবজেক্ট এই ইন্টারফেসটি বাস্তবায়ন করতে পারে এবং লেন () উত্তরটি ফিরিয়ে দেবে, এমনকি যদি বস্তুটি ধারণাগতভাবে সিকোয়েন্স না হয়।

ইন্টারফেসের সম্পূর্ণ তালিকার জন্য, এখানে একবার দেখুন: http://docs.python.org/references/datamodel.html#basic-customization


23

যে কোনও পাইথন অবজেক্টের দৈর্ঘ্য পাওয়ার পছন্দনীয় উপায় হ'ল এটি lenফাংশনের আর্গুমেন্ট হিসাবে পাস করা । অভ্যন্তরীণভাবে পাইথন তার পরে __len__পাস করা বস্তুর বিশেষ পদ্ধতিটি কল করার চেষ্টা করবে ।



10

len(arr) অ্যারের দৈর্ঘ্য পেতে আপনি পূর্ববর্তী উত্তরের পরামর্শ অনুযায়ী ব্যবহার করতে পারেন । আপনি যদি 2D অ্যারের মাত্রা চান তবে আপনি arr.shapeরিটার্নগুলির উচ্চতা এবং প্রস্থ ব্যবহার করতে পারেন


7

len(list_name)ফাংশন প্যারামিটার হিসাবে তালিকা গ্রহণ করে এবং এটি তালিকার __len__()ফাংশনটিকে কল করে।


1

পাইথন ব্যবহারকারীদের যেমন অন্যান্য ছেলেরা বলেছেন, তেমন ধারাবাহিকতার len()পরিবর্তে ব্যবহারকারীদের ব্যবহার করার পরামর্শ দেয় __len__()। তবে আরও কিছু সুবিধা রয়েছে:

কিছু বিল্ট-ইন মত ধরনের list, str, bytearrayইত্যাদি, এর Cython বাস্তবায়ন len()একটি শর্টকাট লাগে। এটি সরাসরি ob_sizeসি কাঠামোয় ফিরে আসে , যা কল করার চেয়ে দ্রুত __len__()

আপনি যদি এই জাতীয় বিবরণে আগ্রহী হন, আপনি লুসিয়ানো রামালহোর "ফ্লাইট পাইথন" নামক বইটি পড়তে পারেন। এতে অনেক আকর্ষণীয় বিশদ রয়েছে এবং পাইথনকে আরও গভীরভাবে বুঝতে আপনাকে সহায়তা করতে পারে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.