سلام رفقا ??
امیدورارم که حالتون عالی باشد ...
با بررسی یکی از مهم ترین توابع داخلی پایتون در خدمت شما هستیم.
تابع map یکی از مهم ترین و البته ساده ترین توابع داخلی پایتون هست که کاربرد جالبی دارد:)
این تابع میاد اول یک تابع از ما می گیرد و به عنوان آرگمان دوم یک مقدار قابل تکرار (iterable) مثل لیست یا تاپل را از ما می گیرد و اون تابع رو روی تمام اون المان های iterable ما پیاده سازی و اجرا می کند.
الان با یک مثال کاملا متوجه می شویم:
می خواهیم برنامه ای بنویسیم که لیستی از دما ها را بدهیم و اون دما ها را به شکل فارنهایت شده نمایش بده:
1- خب در مرحله اول باید یک لیست از دما ها بسازیم:
2- حالا باید یک تابع بنویسیم تا تک تک این المان ها را داخل تابع قرار بدهد :
فرمول تبدیل دمای سانتی گراد به فارنهایت : 32 + (n * 9/5)
تا اینجا که همچی تکراری بود ، حالا یک متغیر تعریف می کنیم و مقدارش را map قرار می دهیم در آرگمان اول تابع centigrade_to_fahrenheit را می دهیم و به عنوان آرگمان دوم لیست Temperatures را می دهیم.
دقت کنید که برای دادن آرگمان اول به هیچ وجه نباید بعد از تابع پرانتز بزاریم
result = map(centigrade_to_fahrenheit() , Temperatures)
الان کد بالا چون بعد از اسم تابع پرانتز گذاشته غلط هست.
شکل صحیح به این شکل هست :
result = map(centigrade_to_fahrenheit , Temperatures)
دقت کنید برای نمایش این result باید از متود list استفاده کنید و لیست شده ی آن را چاپ کنید
با نمایش result با متود list ، به لیستی می رسیم که تمام دماهای ما به فارنهایت تبدیل شده و در نتیجه قابل ملاحظه هست پس تابع map تک تک اعضای لیست ما را در تابع می گذارد و به عبارت دیگر تابع رو روی هر کدام اجرا می کند
کد کامل :
همین چند ثانیه پیش گفتم برای استفاده از map باید نتیجه حاصل اون را با متود list تبدیل به list کنید در غیراینصورت تابع map کاربرد خودش را از دست می دهد. حالا شاید برای شما سوال بشود که اگر ما همینجوری و بدون لیست کردن متغیر result اون را چاپ کنیم چه اتفاقی می افتد ؟ با هم امتحان می کنیم...
print(result)
نتیجه کد بالا :
<map object at 0x000001E45726AE00>
در واقع به ما می گوید شی یا تابعی به نام map توی کجا مموری ذخیره شده...
ولی حالا هنگام پرینت result را list می کنیم:
print(list(result))
نتیجه :
[86.0, 140.0, 50.0, 60.8, 33.8]
می دانید که اگر بخواهیم یک تابع رو خلاصه کنیم و یک تابع یک خط باشد بخصوص برای این توابعی که توی پایتون خودشون از ما یک تابع می خواهد ، بهتر هست از لامبدا بجای توابع معمولی استفاده کنیم همین مثال رو یک بار یا لامبدا ها می نویسیم:
چون لامبدا ها بحث اش جدا است خیلی روی لامبدا ها بحث نمی کنیم ...
این مطلب را با مثال شروع می کنیم :
سه تا لیست به نام های a , b , c تعریف می کنیم و سه عدد متوالی توی آنها قرار می دهیم:
a = [ 1 , 2 , 3 ] b = [4 , 5 , 6] c = [7 , 8 , 9]
حالا متغیر result رو می سازیم:
result = map(lambda x,y,c : x + y + c , a,b,c)
حالا چاپ می کنیم :
print(list(result))
نتیجه به این شکل خواهد بود :
[12, 15, 18]
می بینیم که اعداد اول سه لیست را جمع کرده و 18 شده اعداد دوم سه لیست را جمع کرده که 15 شده اعداد سوم ، سه لیست را جمع کرده است که 12 شده در واقع عدد اول لیست اول به عنوان x عدد اول لیست دوم به عنوان y و عدد اول لیست سوم به عنوان c توی لامبدا هستند و جمعشون بر می گردد. به همین شکل مقادیر دوم و سوم ، سه لیست جمع می شوند.
تمرین
برنامه ای بنویسید که یک لیست adjective یا صفات داشته باشیم و 4 صفت روی توی اون قرار بدهیم مثل good , expensive , Beautiful , fool و یک لیست دیگر 4 تا شی یا اسم را قرار بدهیم مثل people , car , flower , program و با استفاده از فانکشن map برنامه ای بنویسید که یک اسم را در کنار صفت قرار بدهد مثلا good person , expensive car و ....
امیدوارم که این پست برای شما مفید واقع شده باشد ...
ممنون می شوم نظرات خودتون را برای ما کامنت کنید