2022-04-10 16:30:15
کلاس
map
کلاس map یکی دیگه از تایپهای
built-in پایتون است.
این تایپ برای اولین پارامتر یک Callable دریافت میکنه (مثلا یک تابع یا یک کلاس که داندر ____call____ رو پیادهسازی میکنه) و پارامتر بعدیش تعداد متغیری iterable هست که بعد از callable بهش پاس میدیم. signature عه تابع مپ به این شکل هست:
map(callable, *iterables) —> map object
اما map چه کاری انجام میده؟
اول از همه تایپ مپ درست مانند range و فیلتر lazy iterator هست، یعنی فوری نتایج رو محاسبه نمیکنه،
کاری که map میکنه اینه که میاد دونه دونه از اون iterable (یا iterableهایی) که بهش داده شده، به اون callable پاس میده و نتیجه ای که اون callable بهش داده (در واقع مقداری که از callable ما return شده) رو هر بار که ما next میزنیم به ما برمیگردونه!
چند مثال کاربردی
تبدیل همه اعداد یک لیست به مربع خودشان:
lst = [2, 4, 6, 8]
print(list(map(lambda x: x ** 2, lst)))
Output: [4, 16, 36, 64]
تبدیل تمام استرینگهای یک لیست به شکل Uppercase خودشان:
lst = ["John", "David", "Mike"]
print(list(map(str.upper, lst)))
Output: ['JOHN', 'DAVID', 'MIKE']
نکته مهم
اگر به map چند تا iterable میدید، باید حواستون باشه که اون callable باید به تعداد iterableها پارامتر داشته باشه! مثال:
x = list(map(lambda x, y: x + y, [1, 2, 3], [4, 5, 6]))
print(x)
Output: [5, 7, 9]
در مثال بالا دو تا iterable به مپ پاس دادیم پس باید تابعی که به map میدیم دوتا آرگومان بگیره. حالا map میاد پارامتر اول (یعنی x) رو از اولین iterable و دومی رو (یعنی y) از دومین iterable میگیره! نکته قابل توجه دیگه اینکه، این فرایند توی تابع (یعنی جمع x و y) به تعداد اعضای کوتاه ترین iterable انجام میشه! یعنی اگر یکی از iterable ها 2 عضو داشت و بقیه 5 عضو، فقط روی 2 عضو اول هر iterable مپ کار انجام میده! مثال:
x = list(map(lambda x, y: x + y, [2, 3], [4, 5, 6, 4]))
print(x)
Output: [6, 8]
#builtins
@PSFarsi
503 viewsSeّyed Iliya, edited 13:30