تُستخدم وظيفة map() في Python لتطبيق وظيفة على جميع عناصر التسلسل المحدد وإرجاع كائن map. كائن map في Python هو محدد تكرار، لذلك يمكننا التكرار على عناصره. يمكننا أيضًا تحويل كائن map إلى كائنات تسلسل مثل قائمة، tuple وما إلى ذلك باستخدام وظائف المصنع الخاصة بهم.
وظيفة map() في Python
بناء جملة وظيفة map() في Python هو:
map(function, iterable, ...)
يمكننا تمرير عدة وسائل تسلسلية إلى وظيفة map()، في هذه الحالة، يجب أن تحتوي الوظيفة المحددة على تلك العديد من الوسائط. سيتم تطبيق الوظيفة على عناصر هذه الوسائط التسلسلية بشكل متزامن. مع وجود عدة وسائط تسلسلية، يتوقف مكرر map عندما يتم استنفاد أقصر وسيلة تسلسلية.
مثال على وظيفة map() في Python
لنكتب وظيفة لاستخدامها مع وظيفة map().
def to_upper_case(s):
return str(s).upper()
إنها وظيفة بسيطة تعيد تمثيل سلسلة الأحرف بالأحرف الكبيرة لكائن الإدخال. أنا أيضًا أعرف وظيفة مساعدة لطباعة عناصر المكرر. ستقوم الوظيفة بطباعة عناصر المكرر بفراغ أبيض وستعيد استخدامها في جميع مقاطع الشيفرة.
def print_iterator(it):
for x in it:
print(x, end=' ')
print('') # for new line
لنلق نظرة على مثال دالة الخريطة (map) مع أنواع مختلفة من القابليات للتكرار.
Python map() مع السلسلة
# map() مع السلسلة
map_iterator = map(to_upper_case, 'abc')
print(type(map_iterator))
print_iterator(map_iterator)
الناتج:
<class 'map'>
A B C
Python map() مع الصفيف
# map() مع الصفيف
map_iterator = map(to_upper_case, (1, 'a', 'abc'))
print_iterator(map_iterator)
الناتج:
1 A ABC
Python map() مع القائمة
map_iterator = map(to_upper_case, ['x', 'a', 'abc'])
print_iterator(map_iterator)
الناتج:
X A ABC
تحويل الخريطة إلى قائمة، صفيف، مجموعة
بما أن كائن الخريطة هو مُكرر، يمكننا تمريره كوسيطة إلى طرق المصنع لإنشاء قائمة، صفيف، مجموعة إلخ.
map_iterator = map(to_upper_case, ['a', 'b', 'c'])
my_list = list(map_iterator)
print(my_list)
map_iterator = map(to_upper_case, ['a', 'b', 'c'])
my_set = set(map_iterator)
print(my_set)
map_iterator = map(to_upper_case, ['a', 'b', 'c'])
my_tuple = tuple(map_iterator)
print(my_tuple)
الناتج:
['A', 'B', 'C']
{'C', 'B', 'A'}
('A', 'B', 'C')
Python map() مع lambda
يمكننا استخدام دوال لامبدا مع دالة map() إذا لم نرغب في إعادة استخدامها. هذا مفيد عندما تكون وظيفتنا صغيرة ولا نريد تعريف وظيفة جديدة.
list_numbers = [1, 2, 3, 4]
map_iterator = map(lambda x: x * 2, list_numbers)
print_iterator(map_iterator)
الناتج:
2 4 6 8
دالة map() في بايثون مع عدة متغيرات
لنلقي نظرة على مثال لاستخدام دالة map() مع عدة متغيرات قابلة للتكرار.
# map() مع عدة متغيرات قابلة للتكرار
list_numbers = [1, 2, 3, 4]
tuple_numbers = (5, 6, 7, 8)
map_iterator = map(lambda x, y: x * y, list_numbers, tuple_numbers)
print_iterator(map_iterator)
الناتج: 5 12 21 32
لاحظ أن وظيفتنا لها متغيران. المُكرر الناتج من الخريطة هو نتيجة تطبيق هذه الوظيفة على العناصر القابلة للتكرار في كلاهما بالتوازي. دعونا نرى ما يحدث عندما تكون المتغيرات القابلة للتكرار مختلفة الأحجام.
# map() مع عدة متغيرات قابلة للتكرار بأحجام مختلفة
list_numbers = [1, 2, 3, 4]
tuple_numbers = (5, 6, 7, 8, 9, 10)
map_iterator = map(lambda x, y: x * y, list_numbers, tuple_numbers)
print_iterator(map_iterator)
map_iterator = map(lambda x, y: x * y, tuple_numbers, list_numbers)
print_iterator(map_iterator)
الناتج:
5 12 21 32
5 12 21 32
فعندما تكون المتغيرات مختلفة الأحجام، فإن دالة الخريطة تُطبق على العناصر حتى ينفد أحدها.
دالة map() في بايثون مع الدالة None
لنرى ما يحدث عندما نمرر الدالة كـ None.
map_iterator = map(None, 'abc')
print(map_iterator)
for x in map_iterator:
print(x)
الناتج:
Traceback (most recent call last):
File "/Users/pankaj/Documents/github/journaldev/Python-3/basic_examples/python_map_example.py", line 3, in <module>
for x in map_iterator:
TypeError: 'NoneType' object is not callable
يمكنك التحقق من النص الكامل لسكريبت Python والمزيد من الأمثلة على Python من مستودع GitHub.
المرجع: الوثائق الرسمية
Source:
https://www.digitalocean.com/community/tutorials/python-map-function