در این آموزش تابع map در پایتون رو به صورت کامل و با مثال و تمرین آموزش میدیم! در مثال دوم هم این تابع رو با تابع lambda در پایتون مخلوط میکنیم تا مفیدتر باشه! در نهایت یک تمرین هم برای یادگیری بیشتر (با جواب) برای شما قرار دادیم!
بذارید با مثال این آموزش رو پیش ببریم!
فرض کنید یک لیست داریم به اسم x و به صورت زیر:
x=[1,2,3]
و فرض کنید که قراره همه مولفههای این لیست رو ضربدر در 2 کنیم!
علیالحساب، بیاید تابع زیر که برای 2 برابر کردن هست رو تعریف کنیم! (اسم تابع رو گذاشتیم double به معنی دووووبل کردن، دوبرابر کردن! هر اسم دیگهای هم میتونستید بذارید، مثل Sajjad مثلاً!!)
def double(a): return a*2
اگر تابع تعریف کردن در پایتون رو بلد نیستید، به آموزش زیر مراجعه کنید!
آموزش تعریف تابع در پایتون (python)
قطعه کد زیر رو در نظر بگیرید، تا من خط به خط توضیحش بدم!
x=[1,2,3] y=list(map(double, x)) print(y)
در خط 1 که همون لیست خودمون رو وارد کردیم!
در خط 2، یه چندتا بخش داره که سعی میکنم جداگانه توضیح بدم! به بخش زیر دقت کنید!
map(double, x)
این قسمت میاد تابع double (که کارش دو برابر کردن بود!) رو روووی عناصر لیستِ x پیاده میکنه!
در زبان انگلیسی map یعنی نگاشت کردن، تصویر کردن [البته یکی از معنیهاش اینه!] عملاً داریم تابع double رو روووی عناصر لیستِ x نگاشت میکنیم (تصویر میکنیم/اِعمال میکنیم یا هر جووور دیگه و با هر ادبیات دیگه که حال میکنید برای خودتون بگید!)
تذکر: اگر بجای double در دستور فوق، به صورت زیر بنویسید، مطمئن باشید با خطا مواجه میشید!
double()
یعنی اگر پرانتز بذارید، خطا روووو شاخشه! و قطعاً خطا دریافت میکنید!
داشتم توضیح میدادم که یهو مجبور شدم، حاشیه برم! بریم سراغ توضیح خودمون! پس اون map، میاد تابع دوبرابر کردن رو روووی عناصر x اِعمال میکنه! اما خروجی این تابع map خیلی واسه ما قابل دیدن نیست [دلیلش رو کمی جلوتر میگم!]. برای همین مجبوریم خروجی این بندهخدا رو بدیم به تابع list تا بیاد به لیست تبدیلش کنه، تا بتونیم یه سری چیز میز ببینیم حداقل!
حالا چرا خروجی map قابل دیدن نیست؟! در ادامه توضیحی که میدم رو درصورتی متوجه میشید که سطح پایتون خوبی داشته باشید و با شیگرایی در پایتون آشنا باشید!
شی گرایی – آموزش اشیاء و کلاس ها در پایتون
درواقع خروجی این map یک object است که قابل دیدن نیست! و برای اینکه بتونیم خروجی رو ببینیم، اومدیم تبدیلش کردیم به لیست!
خلاصه در خط دومِ کُد زیر، داریم عناصر لیست x رو دو برابر میکنیم! و میریزیم توی متغیر y!
در خط سوم هم داریم همین y رو پرینت میکنیم! که خروجی میشه:
[2, 4, 6]
این مثال یکم پیشنیاز نیاز داره! قطعاً باید قبلش بدونید توابع lambda چی هستن و چجوری کار میکنن وگرنه تضمین میکنم خوف میکنید!
خب حالا که پیشنیازها رو طی کردید، بریم سراغ آموزش خودمون! قطعه کد زیر رو در نظر بگیرید تا خط به خط توضیح بدم!
x=[1,2,3] y=list(map(lambda a:a*2, x)) print(y)
در خط 1 که همون لیست x خودمون رو وارد کردیم!
در خط دو داریم تابعی مینویسیم که ورودی مثل a رو میگیره و در خروجیش دوبرابر اوون ورودی رو برمیگردووونه! (قرار شد اوون آموزش پیشنیاز رو نگاه کنید دیگه! توی اون آموزش دقیقاً همین تابع رو برای حالتی که تابع ورودی رو 5 برابر میکنه رو توضیح دادیم!)
خلاصه تنها فرقش با مثال 1 اینه که در اینجا فقط نوع تابعی که تعریف کردیم، دیگه تابع سادهی خود پایتون نیست! و اومدیم با lambda function تابع تعریغ کردیم! همین! بقیش کاملاً شبیه مثلا 1 است و اجازه بدید اَلَکی وقت شما رو نگیرم!
خروجی بازهم مثل قبل خواهد بود:!
[2, 4, 6]
برنامهای بنویسید (با همین چیزایی که در این جلسه گفتیم البته!) که مولفههای لیست x زیر رو تک تک به توان دو برسوونه!
x=[1,2,3]
جواب [امیدوارم اول خودتون بنویسید، بعد جواب زیر رو نگاه کنید]:
x=[1,2,3] y=list(map(lambda a:a**2, x)) print(y)
دیگه اظهر من اشمس است که اوون ** علامت توان در پایتون است! (هرچند فرض میکنیم کسی که داره آموزش map در پایتون رو میبینه، قطعاً ** رو میدونه که نشووونه توان است، اما اگر نمیدونید میتونید به آموزشهای قبلی خودمون مراجعه کنید!)
تعداد دیدگاه | 6 |
تاریخ انتشار | 24/11/2019 |
تاریخ بروزرسانی | 24/11/2019 |