أفضل الممارسات لحلقة for في بايثون

أفضل الممارسات لحلقة for في بايثون

توضح هذه المقالة أفضل الممارسات لحلقة for في بايثون۔

YouTube Video

أفضل الممارسات لحلقة for في بايثون

في بايثون، تعتبر حلقة for أداة قوية للتكرار عبر مجموعة من العناصر المتعددة۔ هنا، نتعمق في الاستخدام القياسي لحلقة for في بايثون ونستكشف أفضل الممارسات.۔ سنقدم أمثلة عملية على الشيفرة البرمجية، والقضايا الشائعة، وتقنيات للحفاظ على كفاءة الشيفرة.۔

حلقة for الأساسية

حلقة for الأساسية في بايثون بسيطة نسبياً۔ على سبيل المثال، يمكنك إخراج عناصر قائمة واحدة تلو الأخرى كما هو موضح أدناه:۔

1fruits = ["apple", "banana", "cherry"]
2for fruit in fruits:
3    print(fruit)
  • تُخرج الشيفرة أعلاه العناصر "تفاحة" و"موز" و"كرز" بالترتيب.۔

صياغة التكرار

هذا مثال بسيط نسبيًا، لكن حلقة for يمكنها تنفيذ سيناريوهات أكثر تعقيدًا۔ على سبيل المثال، يمكنك استخدام enumerate أو zip للتكرار عبر عدة قوائم في وقت واحد۔

استخدام enumerate

1fruits = ["apple", "banana", "cherry"]
2for index, fruit in enumerate(fruits):
3    print(f"{index}: {fruit}")
  • باستخدام enumerate، يمكنك الحصول على الفهرس والعنصر في نفس الوقت۔

استخدام zip

1names = ["Alice", "Bob", "Charlie"]
2ages = [25, 30, 35]
3for name, age in zip(names, ages):
4    print(f"{name} is {age} years old.")
  • باستخدام zip، يمكنك التكرار عبر عدة قوائم في وقت واحد۔

ميزات القوائم وإدارة الحالات الحديّة

استخدام القوائم مباشرةً مريح، ولكن عند العمل مع بيانات كبيرة، من المهم استخدام صياغة واضحة وفعالة۔

استيعاب القوائم

على سبيل المثال، إذا كنت ترغب في تجنب تكرار عناصر القائمة، يمكنك استخدام مجموعة (set) لمنع التكرار في المخرجات.۔

1items = ["apple", "banana", "apple", "cherry"]
2for item in set(items):
3    print(item)
  • في هذا المثال، يتم استخدام مجموعة (set) لمعالجة العناصر المكررة.۔

التكرار عبر القواميس

عند التكرار عبر القواميس، استخدم طريقة items() للوصول إلى المفاتيح والقيم۔

1capitals = {"USA": "Washington, D.C.", "France": "Paris", "Japan": "Tokyo"}
2for country, capital in capitals.items():
3    print(f"The capital of {country} is {capital}.")
  • يقوم هذا الكود بالتكرار على مفاتيح وقيم القاموس الذي يحتوي على الدول وعواصمها، ويقوم بطباعتها.۔

استخدام تعبيرات القوائم

استخدام تعبيرات القوائم يمكن أن يجعل الكود أكثر اختصارًا وقابلية للقراءة۔ هذا فعال عند إنشاء قوائم جديدة باستخدام حلقات for۔

1squares = [x**2 for x in range(10)]
2print(squares)
  • يستخدم هذا الكود الفهم القائم على القوائم لحساب مربعات الأعداد الصحيحة من 0 إلى 9 ويخزن النتائج في قائمة.۔

الحلقات الشرطية

بإضافة شروط، يمكنك تنفيذ تصفية أو عمليات أخرى داخل الحلقة عندما تكون هناك حاجة لإجراءات محددة۔

1numbers = [1, 2, 3, 4, 5]
2even_squares = [x**2 for x in numbers if x % 2 == 0]
3print(even_squares)
  • يستخدم هذا الكود الفهم القائم على القوائم لتربيع الأعداد الزوجية فقط من قائمة numbers ويقوم بتخزينها في قائمة جديدة.۔

استخدام else

في بايثون، يمكنك تضمين جملة else داخل الحلقة۔ هذا يتم تنفيذه فقط إذا انتهت الحلقة بشكل طبيعي دون أن يتم قطعها باستخدام break۔

1numbers = [1, 2, 3, 4, 5]
2search_for = 6
3
4for number in numbers:
5    if number == search_for:
6        print("Number found!")
7        break
8else:
9    print("Number not found.")
  • في هذا الكود، بما أن القيمة 6 المعينة إلى search_for غير موجودة في القائمة، تستمر الحلقة حتى النهاية ثم تعرض الرسالة 'لم يتم العثور على الرقم'.۔

الحذر عند تعديل قائمة داخل حلقة تكرار.

تعديل قائمة موجودة داخل حلقة for يمكن أن يؤدي إلى سلوك غير مقصود أو نتائج غير متوقعة.۔ يجب تجنب مثل هذه العمليات بشكل عام.۔

مثال على الحالة الأسوأ

1numbers = [1, 2, 3, 4]
2for i in numbers:
3    numbers.append(i * 2)  # Modify the list while iterating
4    if len(numbers) > 10:
5        break  # Avoid infinite loop
  • قد يؤدي ذلك إلى نتائج غير متوقعة وليس كودًا آمنًا۔ بدلاً من ذلك، يُوصى بإنشاء قائمة جديدة أو استخدام حلقة تعتمد على الفهرسة للحفاظ على استقرار الكود.۔

اختيار البيانات المستهدفة

باستخدام هياكل بيانات مناسبة أثناء تنفيذ حلقة for، يمكنك تحسين الكفاءة۔ استخدام المولدات لتحويل البيانات الكبيرة أو itertools لتبسيط العمليات فعال۔

المولد (Generator)

1def generate_numbers():
2    for i in range(5):
3        yield i
4
5for number in generate_numbers():
6    print(number)
  • من خلال استخدام مثل هذه المولدات، يمكنك التعامل مع البيانات بطريقة تدفقية بدلاً من تحميل كل شيء دفعة واحدة۔

itertools

1import itertools
2
3# Generate numbers starting from 0 infinitely (limited using takewhile)
4counter = itertools.count()
5
6# Output numbers from 0 to 4
7for number in itertools.takewhile(lambda x: x < 5, counter):
8    print(number)
  • باستخدام مكتبة itertools، يمكنك معالجة البيانات بكفاءة مثل التدفقات اللانهائية مع الحفاظ على التحكم.۔ على سبيل المثال، كما هو موضح أعلاه، يمكنك توليد تسلسل من القيم باستخدام count() واستخراج القيم فقط عندما يتحقق شرط معين باستخدام takewhile().۔ يتيح هذا إجراء معالجة مرنة وواضحة للتدفقات دون الحاجة إلى تحديد شروط الانتهاء بشكل صريح.۔

الخاتمة

حلقة for في بايثون يمكنها التعامل مع مجموعة واسعة من المهام، من التكرارات البسيطة إلى التحويلات المعقدة۔ مع ذلك، قد يؤدي الاستخدام غير السليم إلى تعقيدات غير ضرورية وانخفاض الكفاءة۔ من خلال اتباع هذه الممارسات الفضلى، يمكنك كتابة كود فعال مع تحسين سهولة الصيانة وقابلية القراءة۔

يمكنك متابعة المقالة أعلاه باستخدام Visual Studio Code على قناتنا على YouTube.۔ يرجى التحقق من القناة على YouTube أيضًا.۔

YouTube Video