دانشجوی کامپیوتر، برنامه نویس پایتون، توسعه دهنده وب و علاقه مند به نوشتن...
آبجکت Ellipsis یا سه نقطه (...) در پایتون
شاید توی بعضی سورسکدهای پایتونی، مخصوصاً کتابخونههای مطرح، سه نقطه(...) رو دیده باشید و کنجکاو باشید که کارش چیه و چرا اونجا استفاده شده، شاید هم باهاش آشنا نباشید و از وجودش خبر نداشته باشید. توی این پست، میبینیم که این ... اصلا چی هست و کجاها استفاده میشه.
به گفته داکیومنت پایتون، Ellipsis یک مقدار ویژهاس که بیشتر در سینتکس slicing برای دیتا تایپهای تعریفیِ کاربر به کار میره.
چیز زیادی نمیشه ازش فهمید، نه؟ خب بریم ببینیم کجاها استفاده میشه تا درکش برامون راحت تر بشه.
۱. به عنوان place holder
از ... میتونیم به جای pass، درون تابع، یا کلاسی که هنوز نوشته نشده استفاده کنیم:
درواقع به جای pass میتونیم هر expressionای، مثلا یک عدد استفاده کنیم:
۲. ... در numpy
شاید بیشترین استفاده از ... توی کتابخونه numpy و برای slice کردن آرایههای چند بعدی(ماتریس) باشه.
به فرض مثال اگه توی پایتون، یه آرایه دو بعدی داشته باشیم، و بخوایم به عنصر دوم از لیست دوم دسترسی پیدا کنیم، باید به شکل زیر عمل کنیم:
در numpy نیازی نیست از دو براکت استفاده کنیم و میتونیم مقدار مربوط به هر براکت رو با کاما از هم جدا کنیم:
حالا اگه بخوایم تمام اعضای آرایه دوم رو بگیریم:
حالا کار جالبی که میتونیم انجام بدیم اینه که مثلا عنصر دوم، از تمام آرایهها رو بگیریم:
۳. در Circular Refrenceها
ویرایش: (توضیحات کامل تر در مورد این بخش رو از اینجا بخونید)
اول با یه مثال بگیم که Circualr Refrence ها چی هستن:
ارجاع چرخشی وقتی اتفاق میوفته که متغیر درون آبجکت A به آبجکت B اشاره میکنه، و متغیر درون آبجکت B به آبجکت A اشاره میکنه.
اینجا عنصر دوم لیست a، داره به خود لیست اشاره میکنه، و پایتون بجای اینکه بیاد تا ابد دوباره همون لیست رو قرار بده و صفحه رو پُر کنه، یا توی یه حلقه بینهایت گیر کنه، میاد اونجا رو با [...] پر میکنه.
۴. در فریموورک FastAPI
یه استفاده جالب از ... رو در فریموورک FastAPI دیدم:
در لینکهای وب، مثلا لینک زیر
google.com/?q=test
به اون q کوئری پارامتر میگیم.
توی این فریموورک میتونیم کوئری پارامتر ها رو به این شکل تعریف کنیم:
حالا اگه بخوایم به فریموورک بفهمونیم که این کوئری پارامتر اجباری نیست، باید یک مقدار پیشفرض براش مشخص کنیم که اگر کاربر چیزی وارد نکرد، اون مقدار پیشفرض رو به جاش قرار بده:
این فریموورک بهمون اجازه میده که ولیدیشنهای بیشتری هم روی اون کوئری پارامتر انجام بدیم، مثلا مشخص کنیم که حداقل چند کاراکتر داشته باشه:
اگه دقت کنید، چون q رو مساوی با چیزی قرار دادیم، به اون یه مقدار پیشفرض None دادیم که توی آرگومان اول تعریف شده!
حالا اگه بخوایم بگیم که این پارامتر اجباری هست باید چیکار کنیم؟
میتونیم این کارو انجام بدیم:
read_items(q: str):
ولی در این حالت دیگه نمیتونیم از ولیدیشنهای اضافی استفاده کنیم.
اینجاست که ... به کارمون میاد:
با قرار دادن ... در اولین آرگومان Query میتونیم مشخص کنیم که q اجباری هست و حتما باید فراهم بشه.
منابع:
What is Python's Ellipsis Object?
Python Ellipsis (triple dots): What is it, How to Use
What does the Ellipsis object do?
"Slicing" in Python Expressions documentation
مطلبی دیگر از این انتشارات
مقدمه ای بر عملگرها در جاوا اسکریپت - قسمت اول
مطلبی دیگر از این انتشارات
بحث سازگاری در سیستمهای ذخیره سازی توزیعشده
مطلبی دیگر از این انتشارات
بتمن ،اندروید ،گوگل و دیگران