مقدمهای بر تابع enumerate در Python
۴ تیر ۱۴۰۰
پیمایش انواع دادهها یکی از متداولترین کارهایی است که هر برنامهنویس در پروژههای مختلف با آن سروکار دارد بنابراین یادگیری یک تکنیک اساسی و درست میتواند تاثیر بسیار زیادی در عملکرد برنامههای شما داشته باشد. حال ما در این مقاله تصمیم داریم تابع enumerate
که بهصورت پیشفرض در Python 3 ارائه شده است را به شما معرفی کنیم.
اما قبل از پرداختن به اصل موضوع، آیا این سوال برای شما پیش آمده که چرا اکثر توسعهدهندگان در اسکریپتهای Python خود از متد range
در حلقهی for
برای پیمایش لیستها استفاده میکنند؟ در جواب این سوال باید به پیشزمینه و تجربهی هر توسعهدهنده نگاه کرد. برای مثال اگر توسعهدهندهای قبلا از زبانهای C و PHP بهعنوان ابزار کار خود استفاده کرده باشد، در این زبانها استفاده از متغیرهای افزاینده i++
در حلقهی for
یک روش متداول برای پیمایش ایندکسهای هر آرایه است:
<?php
$scores = [54, 67, 48, 99, 27];
for ($i = 0; $i < count($scores); $i++) {
echo "{$i} {$scores[$i]} \n";
}
خروجی کدهای فوق به شکل زیر خواهد بود:
0 54
1 67
2 48
3 99
4 27
حال اگر فردی با این پیشزمینه بخواهد از زبان Python استفاده کند، بهدنبال راهحلی مشابه است و برای پیادهسازی همین روش در زبان Python میتوان از حلقهی for
و متد range
استفاده کرد اما مشکلی وجود دارد و آن هم نامناسب بودن این روش برای پیمایش دادهها است زیرا اگر فرض را بر این بگیریم که میخواهیم لیستی را پیمایش کنیم، خود لیست در این روش پیمایش نمیشود و ما از یک متغیر برای فراخوانی مقدار ایندکسها استفاده میکنیم. بااینحال استفاده از حلقهی for
و متد range
هنوز میان توسعهدهندگان Python رواج دارد:
scores = [54, 67, 48, 99, 27]
for i in range(len(scores)):
print(i, scores[i])
اکنون زمان آن است که بهسراغ معرفی و نحوهی استفاده از تابع enumerate
برویم.
معرفی و نحوهی استفاده از تابع enumerate
تابع enumerate
با سینتکس enumerate(sequence, start=0)
را میتوان در بخشها و شرایطهای مختلفی از پروژه استفاده کرد اما بیایید همان حلقهی for
که در مثال بخش قبل آورده شده است را درنظر بگیریم. در حلقهی for
از تابع enumerate
میتوان بهعنوان یک پیماینده استفاده کرد که انواع دادههای مختلف قابل پیمایشی مانند List، Tuple، String و Dictionary را در پارامتر اول دریافت میکند.
در پارامتر دوم نیز میتوان ایندکسی که میخواهید پیمایش از آن شروع شود را وارد کرد که البته وارد کردن پارامتر دوم اختیاری است و اگر دومین پارامتر وارد نشود، پیمایش از ایندکس شمارهی 0 شروع میشود:
scores = [54, 67, 48, 99, 27]
for i, score in enumerate(scores):
print(i, score)
همانطور که مشاهده میکنید این کد بسیار تمیزتر است و دیگری نیازی نیست تا از متد range
و متغیرهای افزاینده برای فراخوانی ایندکسهای مختلف مورد نظر خود استفاده کنید. همچنین میتوانید با وارد کردن پارامتر دوم به تابع enumerate
از ایندکس دیگری پیمایش توالی ورودی را شروع کنید:
scores = [54, 67, 48, 99, 27]
for i, score in enumerate(scores, 1):
print(i, score)
توسعهدهندگان دربارهی ما چه میگویند
تجربه کار باliara_cloud@امروز خیلی خوب بود. یکی از سرویس هام رو منتقل کردم روش و راضیم. انقد سریع و جذاب کارم راه افتادم اصن باورم نمیشد! برعکس سرویس های PaaS دیگه با اون همه پیچیدگیشون. دمتون گرم
...
MohammadReza
keikaavousi
بعد از بسته شدن @fandoghpaas و ناراحتی همهمون از اینکه یه سرویس خوب و صادق نمیتونه از پس هزینهها بر بیاد، سرویسم رو منتقل کردم به پاس لیارا (https://liara.ir @liara_cloud) . تجربه راحت و خوب. تفاوتهایی داشت که کمی کار میخواست ولی تا الان کاملا راضی.
jadi
jadi
یه خسته نباشید باید به تصمیمliara_cloud@بگم،
بعد از چندین روز سرکله زدن با سرویس های مشابه بالاخره تصمیم گرفتم لیارا رو امتحان کنم و باور نمیشه ۱۰ دقیقه بیشتر وقت نبرد،
دمتون گرم.
Arch
EbadiDev
واسه سرویس PaaS با اختلاف لیارا بهترین رابط کاربری داره و یکی از مزیتهای سرویس دیتابیسشون اینه که خودشون به صورت دورهای بکآپ میگیرن.
...
Ali Najafi
me_ali_najafi
یکی از کارهای خوبی که جدیداً میکنم اینه که یه دیتابیس روی لیارا میسازم و به پروژه وصل میکنم اینطوری هم خونه و هم محل کار دیتابیس بروز رو دارم و راحت میتونم ادامه بدم کار روliara_cloud@
Navid
1navid
عاشقliara_cloud@شدم درسته در حد AWS نیست ولی خب تجربه خوبی واسه پروژه های داخل ایران ارائه میده، میتونم رو CD هم اجراش کنم
Amir H Shekari
vanenshi