يحتوي بايثون على دوال مدمجة قوية يمكنها توفير الوقت وتقليل تعقيد التعليمات البرمجية وتحسين الأداء.
تظل العديد من هذه الدوال غير مستغلة بالشكل الكافي، وخاصة من قبل المبتدئين الذين غالبًا ما يعيدون اختراع العجلة دون أن يدركوا أن بايثون توفر بالفعل حلولاً فعالة.
فيما يلي 12 دالة مدمجة في بايثون أتمنى لو اكتشفتها في وقت سابق من رحلتي!
()enumerate — تتبع الفهارس
بدلاً من استخدام متغير العداد أثناء التكرار عبر القائمة، تتيح لك enumerate()
التكرار باستخدام كل من الفهرس والقيمة:
fruits = ['apple', 'banana', 'cherry']
for index, fruit in enumerate(fruits, start=1):
print(index, fruit)
الناتج:
1 apple
2 banana
3 cherry
يؤدي هذا إلى التخلص من الحاجة إلى صيانة متغير الفهرس يدويًا!
()zip — إقران البيانات بسهولة
عندما تحتاج إلى التكرار عبر قوائم متعددة بالتوازي، فإن zip()
هو الحل الأمثل:
names = ['John', 'David', 'Sam']
scores = [85, 90, 78]
for name, score in zip(names, scores):
print(f"{name} scored {score}")
الناتج:
John scored 85
David scored 90
Sam scored 78
()any و ()all – التحقق من الشروط بشكل نظيف
تُرجع Any()
القيمة True إذا كان عنصر واحد على الأقل في العنصر القابل للتكرار صحيحًا، بينما تُرجع all()
القيمة True إذا كانت جميع العناصر صحيحة:
nums = [0, 1, 2, 3]
print(any(nums)) # True (since there's at least one non-zero value)
print(all(nums)) # False (since 0 is present)
إنه أنظف بكثير من كتابة حلقات صريحة للتحقق من الحالة!
()sorted مع المفتاح – فرز مخصص في سطر واحد
بدلاً من كتابة منطق فرز معقد، تسمح الدالة sorted()
بالتخصيص السهل:
people = [('John', 25), ('David', 30), ('Sam', 20)]
sorted_people = sorted(people, key=lambda x: x[1]) # Sort by age
print(sorted_people)
الناتج:
[('Sam', 20), ('John', 25), ('David', 30)]
()map – تطبيق دالة على كل عنصر
بدلاً من استخدام حلقات for للتحويلات، تطبق map() على جميع العناصر في كائن قابل للتكرار:
nums = [1, 2, 3, 4]
squared = list(map(lambda x: x ** 2, nums))
print(squared)
الناتج:
[1, 4, 9, 16]
بدلاً من ذلك، استخدم فهم القائمة:
squared = [x ** 2 for x in nums]
()filter – استخراج العناصر التي تلبي شرطًا
تساعد دالة filter()
على الاحتفاظ فقط بالعناصر التي تلبي شرطًا معينًا:
nums = [10, 15, 20, 25, 30]
evens = list(filter(lambda x: x % 2 == 0, nums))
print(evens)
الناتج:
[10, 20, 30]
()reduce – تجميع القيم على عنصر قابل للتكرار
يمكن استخدام الدالة reduce()
(من functools) لإجراء عمليات تراكمية مثل المجموع، والمنتج، وما إلى ذلك:
from functools import reduce
nums = [1, 2, 3, 4]
product = reduce(lambda x, y: x * y, nums)
print(product)
الناتج:
24
في حين أن sum()
أكثر قابلية للقراءة لجمع الأرقام، فإن reduce()
تتألق في التراكمات المخصصة!
()setdefault – الحصول على قيم القاموس وتعيينها في وقت واحد
بدلاً من استخدام مفتاح if في عمليات التحقق من القاموس، تقوم دالة setdefault()
بتهيئة مفتاح القاموس إذا لم يكن موجودًا:
student = {'name': 'John'}
age = student.setdefault('age', 25) # Sets default age if not present
print(student)
الناتج:
{'name': 'John', 'age': 25}
()vars – فحص سمات الكائن
تقوم vars()
بإرجاع __dict__ للكائن، مما يجعل من السهل فحص سماته ديناميكيًا:
class Student:
def __init__(self, name, age):
self.name = name
self.age = age
john = Student('John', 25)
print(vars(john))
الناتج:
{'name': 'John', 'age': 25}
()globals و ()locals – فحص المتغيرات العالمية والمحلية
هل تريد فحص المتغيرات في النطاق الحالي؟ استخدم:
x = 10
print(globals()) # Shows all global variables
print(locals()) # Shows local variables within a function
()isinstance – التحقق من النوع بطريقة بايثون
بدلاً من استخدام type()
للتحقق من النوع، فإن isinstance()
أكثر مرونة:
x = 5
print(isinstance(x, int)) # True
print(isinstance(x, (int, float))) # True (supports multiple types)
()callable – التحقق مما إذا كان الكائن قابلاً للاستدعاء
هل تريد التحقق من إمكانية استدعاء كائن كدالة؟ استخدم الدالة callable()
:
def greet():
return "Hello!"
print(callable(greet)) # True
print(callable(42)) # False
مفيد جدًا عند العمل مع الكائنات التي تم إنشاؤها ديناميكيًا!
لقد جعلت هذه الدوال المدمجة تجربتي مع بايثون أكثر سلاسة وكفاءة ومتعة. إذا لم تكن تستخدمها بعد، فابدأ بدمجها في شفرتك البرمجية – ستندهش من مدى سهولة وسرعة نصوصك البرمجية!
اكتشاف المزيد من بايثون العربي
اشترك للحصول على أحدث التدوينات المرسلة إلى بريدك الإلكتروني.