مقدمه ای بر __getitem__: یک روش جادویی در پایتون

مقدمه ای بر __getitem__: یک روش جادویی در پایتون

گره منبع: 2011206

مقدمه ای بر __getitem__: یک روش جادویی در پایتون
تصویر توسط نویسنده

پایتون یک زبان جادویی با مفاهیم بسیاری است که حتی کاربران پیشرفته نیز ممکن است با آن آشنا نباشند. روش های داندر یا جادویی یکی از آنهاست. روش‌های جادویی روش‌های خاصی هستند که با خط‌های دوتایی احاطه شده‌اند. آنها برخلاف روش های معمولی در پایتون به صراحت نامیده نمی شوند. یکی از این روش های جادویی است __getitem__ روشی که اشیاء پایتون را قادر می‌سازد مانند دنباله‌ها یا محفظه‌هایی مانند فهرست‌ها، دیکشنری‌ها و تاپل‌ها رفتار کنند. ایندکس یا برش را می گیرد و مقدار مربوط به آن را از مجموعه بازیابی می کند. هر زمان که از آن استفاده می کنیم به طور خودکار فراخوانی می شود indexer [ ] اپراتور برای دسترسی به عناصر درون شی.

این روش را به عنوان یک عصای جادویی در نظر بگیرید که به شما این قدرت را می دهد که فقط با نوشتن چند خط کد اطلاعات مورد نیاز را استخراج کنید. جالبه درسته؟ این روش همچنین به طور گسترده در تجزیه و تحلیل داده ها و یادگیری ماشین استفاده می شود. بنابراین، بیایید عمیق تر به آن شیرجه بزنیم __getitem__ روش و قدرت و انعطاف پذیری آن را کشف کنید.

می‌خواهم بدانید که وظیفه شما به‌عنوان یک برنامه‌نویس پایتون فراتر از نوشتن کدهای تابعی است. کد شما باید کارآمد، خوانا و قابل نگهداری باشد. استفاده كردن __getitem__ به شما در دستیابی به این اهداف کمک خواهد کرد. در اینجا برخی از مزایای دیگر استفاده از این روش جادویی آورده شده است:

  • استفاده از حافظه را کاهش می دهد و به شما امکان می دهد به جای بارگیری ساختار داده کامل در حافظه، فقط اطلاعات ضروری را استخراج کنید.
  • انعطاف پذیری بیشتری را در نحوه مدیریت و دستکاری داده ها فراهم می کند
  • به شما امکان می دهد بدون حلقه زدن روی داده ها، روی مجموعه تکرار کنید
  • با اجازه دادن به شما برای نوشتن نمایه سازی پیشرفته که ممکن است با انواع داخلی امکان پذیر نباشد، عملکرد را بهبود می بخشد.
  • کد را با استفاده از نماد آشنا ساده می کند

نحو برای __getitem__ روش به شرح زیر است:

def __getitem__(self, index): # Your Implementation pass

 

رفتار تابع را تعریف می‌کند و شاخصی را که می‌خواهید به آن دسترسی داشته باشید را در پارامتر خود می‌گیرد. می توانیم از این روش به صورت زیر استفاده کنیم:

my_obj[index] 

 

این به بیانیه ترجمه می شود my_obj.__getitem__(index) در زیر کاپوت. حالا ممکن است فکر کنید که چه تفاوتی با داخلی دارد indexer [] اپراتور؟ هر جا که از این نماد استفاده می کنید، پایتون به طور خودکار آن را فراخوانی می کند __getitem__ روش برای شماست و مختصر دسترسی به عناصر است. اما اگر می‌خواهید رفتار نمایه‌سازی را برای اشیاء سفارشی تغییر دهید، باید به صراحت آن را فراخوانی کنید __getitem__ روش.

مثال شماره 01

اجازه دهید ابتدا با یک مثال ساده شروع کنیم. ما یک کلاس دانشجویی ایجاد خواهیم کرد که لیستی از همه دانش آموزان خواهد داشت و می توانیم با نمایه به آنها دسترسی داشته باشیم و در نظر بگیریم که این فهرست نشان دهنده شناسه دانشجویی منحصر به فرد آنها است.

class Student: def __init__(self, names): self.names=names def __getitem__(self,index): return self.names[index] section_A= Student(["David", "Elsa", "Qasim"])
print(section_A[2])

 

خروجی:

 

اکنون به یک مثال پیشرفته می رویم که در آن رفتار نمایه سازی را با استفاده از آن تغییر می دهیم __getitem__ روش. فرض کنید من یک لیست از عناصر رشته دارم و می‌خواهم هر زمان که این عنصر را وارد می‌کنم، آن را بازیابی کنم و اگر خود رشته را وارد کنم، می‌توانم موقعیت شاخص را نیز دریافت کنم.

class MyList: def __init__(self, items): self.items = items def __getitem__(self, index): if isinstance(index, int): return self.items[index] elif isinstance(index, str): return self.items.index(index) else: raise TypeError("Invalid Argument Type") my_list = MyList(['red', 'blue', 'green', 'black']) # Indexing with integer keys
print(my_list[0]) print(my_list[2]) # Indexing with string keys
print(my_list['red']) print(my_list['green']) 

 

خروجی:

red
green
0 2

این روش برای جستجوی سریع ویژگی های نمونه بسیار مفید است. با توجه به انعطاف پذیری و تطبیق پذیری این روش، می توانم بگویم این یکی از کم استفاده ترین روش های جادویی پایتون است. امیدوارم از خواندن این مقاله لذت برده باشید و اگر علاقه مند به دانستن سایر روش های جادویی در پایتون هستید، در بخش نظرات به من اطلاع دهید.
 
 
کانوال مهرین یک توسعه دهنده نرم افزار مشتاق با علاقه شدید به علم داده و کاربردهای هوش مصنوعی در پزشکی است. Kanwal به عنوان Google Generation Scholar 2022 برای منطقه APAC انتخاب شد. کانوال دوست دارد دانش فنی را با نوشتن مقالاتی در مورد موضوعات پرطرفدار به اشتراک بگذارد و علاقه زیادی به بهبود نمایندگی زنان در صنعت فناوری دارد.
 

تمبر زمان:

بیشتر از kdnuggets