ویدیو آموزش تابع len در پایتون
در این ویدیو با تابع len پایتون آشنا خواهید شد. این تابع برای شمارش تعداد آیتمهای یک آبجکت iterable استفاده میشود. از این تابع میتوانید در کلاسهایتان نیز استفاده کنید که در این صورت تبدیل به متد __len__ خواهد شد.
دوره پیشنهادی: دوره آموزش پایتون (python)
از تابع len برای شمارش اعضای آبجکتها استفاده میشود. آبجکتی که در کنار len استفاده میکنید باید iterable باشد. به عنوان مثال برای شمارش تعداد اعضای یک list میتوانید به شکل زیر کار کنید:
>>> names = ['amir', 'jack', 'mark']
>>> len(names)
3
در کد بالا، از آنجایی که لیستهای پایتون iterable هستند، توانستیم از تابع len استفاده کنیم. از تابع len میتوانید در کنار لیستها، رشتهها، تاپلها و دیکشنریها استفاده کنید. اگر آبجکتی دارید که نمیدانید iterable هست یا نه، میتوانید از تابع iter استفاده کنید. اگر آبجکت شما iterable نباشد این تابع پیغام خطا نمایش میدهد:
>>> iter('hello')
>>> iter(23)
Traceback (most recent call last):
File "/home/amir/Desktop/python/two.py", line 5, in <module>
iter(23)
TypeError: 'int' object is not iterable
در کد بالا از آنجایی که آبجکت string یک iterable است هیچ اروری نداشتیم اما نوع int که iterable نیست، باعث ایجاد پیغام خطا شده است.
ویدیو پیشنهادی: آموزش توابع sort و sorted در پایتون
متد __len__ یکی از متدهای خاص پایتون است که در کلاسها نوشته میشود. این متد مشخص میکند که اگر روی آبجکتی از کلاس فعلی تابع len استفاده شد چه اتفاقی بیفتد. در حالت عادی اگر روی کلاسهایتان از len استفاده کنید، با پیغام خطا مواجه خواهید شد:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
p = Person('amir', 12)
len(p)
به کد بالا دقت کنید. یک کلاس به نام Person داریم که name و age کاربر را به عنوان آرگومان میگیرد. در پایین کلاس یک نمونه از آن ساخته و مقداردهی کردهایم. سپس در خط آخر با تابع len سعی کردهایم تعداد آیتمهای آبجکت p را بگیریم. اگر کد بالا را اجرا کنید با خطای زیر روبرو خواهید شد:
Traceback (most recent call last):
File "/home/amir/Desktop/python/two.py", line 11, in <module>
len(p)
TypeError: object of type 'Person' has no len()
خطای بالا نشان میدهد که کلاس Person نمیتواند با تابع len کار کند. این خطا به این دلیل ایجاد شده است که پایتون نمیداند در کلاس Person تعداد آیتمهای چه چیزی را باید برگرداند. شما باید مشخص کنید که در زمان استفاده از len کدتان چطور باید کار کند.
برای رفع این مشکل میتوانید از متد __len__ استفاده کنید. داخل این متد باید چیزی را return کنید:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __len__(self):
return len(self.name)
p = Person('amir', 12)
len(p)
# 4
در متد __len__ بالا مشخص کردیم که هر زمان از تابع len روی آبجکتهای کلاس Person استفاده شد، تعداد آیتمهای name را برگرداند. همانطور که در نتیجه میبینید، این کد دیگر پیغام خطا نداده و به درستی کار میکند.
ارسال نظر