إرجاع قيم متعددة من الدوال في بايثون: دليل شامل لاستخدام Tuples, Lists, و Dictionaries

دقائق القراءة: 4
تُعد لغة بايثون من اللغات البرمجية المرنة والقوية التي تتيح للمطورين إنجاز مهام معقدة بكفاءة. إحدى هذه المهام هي القدرة على إرجاع قيم متعددة من دالة واحدة، وهي ميزة أساسية تعزز من تنظيم الكود وقابليته للقراءة. بدلاً من إرجاع قيمة واحدة فقط، يمكن لدوال بايثون تجميع عدة قيم داخل هيكل بيانات واحد ثم إرجاع هذا الهيكل. في هذا المقال، سنتعمق في كيفية تحقيق ذلك باستخدام ثلاثة من أهم هياكل البيانات في بايثون: الصفوف (Tuples)، القوائم (Lists)، والقواميس (Dictionaries).

لنبدأ بمثال بسيط يوضح كيف يمكن لدالة أن تُرجع قائمة تحتوي على عدة قيم. تخيل أنك تريد حساب عدد الأميال التي يجب قطعها أسبوعياً بناءً على حد أدنى معين:

def miles_to_run(minimum_miles):
week_1 = minimum_miles + 2
week_2 = minimum_miles + 4
week_3 = minimum_miles + 6
return [week_1, week_2, week_3]

print(miles_to_run(2))
# result: [4, 6, 8]

في هذا المثال، تقوم الدالة miles_to_run() بحساب الأميال لثلاثة أسابيع ثم تُرجعها في شكل list. تُستخدم هياكل البيانات في بايثون لتخزين مجموعات من البيانات، ويمكن إرجاع هذه المجموعات مباشرةً من الدوال.

إرجاع قيم متعددة باستخدام الصفوف (Tuples)

الصفوف (Tuples) هي هياكل بيانات مرتبة وغير قابلة للتعديل (immutable). هذا يعني أنه بمجرد إنشاء الصف، لا يمكن تغيير محتوياته. تُعد الصفوف مثالية لتخزين مجموعات من البيانات التي لا يُتوقع أن تتغير، مثل معلومات شخص (اسمه، عمره، وموقعه).

مثال على إنشاء صف (Tuple)

يمكنك إنشاء صف بسيط كالتالي:

nancy = ("nancy", 55, "chicago")

دالة تُرجع صفاً (Tuple)

إليك كيفية كتابة دالة تُرجع صفاً:

def person():
return "bob", 32, "boston"

print(person())
# result: ('bob', 32, 'boston')

لاحظ أننا لم نستخدم الأقواس الهلالية () في جملة الإرجاع return. هذا لأن بايثون تسمح لك بإرجاع صف بمجرد فصل العناصر بفاصلة ,، كما هو موضح في المثال أعلاه. تشير وثائق بايثون إلى أن “الفاصلة هي التي تُنشئ الصف، وليست الأقواس”. ومع ذلك، تكون الأقواس إلزامية عند إنشاء صف فارغ أو لتجنب الغموض.

استخدام الأقواس لإرجاع الصفوف

إليك مثال لدالة تستخدم الأقواس () لإرجاع صف، مما يزيد من وضوح الكود في بعض الحالات:

def person(name, age):
return (name, age)

print(person("henry", 5))
# result: ('henry', 5)

إرجاع قيم متعددة باستخدام القوائم (Lists)

القوائم (Lists) هي هياكل بيانات مرتبة وقابلة للتعديل (mutable). على عكس الصفوف، يمكن تغيير محتويات القائمة بعد إنشائها، مما يجعلها مرنة للغاية لتخزين مجموعات من البيانات التي قد تحتاج إلى التحديث أو التعديل.

أمثلة على إنشاء قائمة (List)

يمكنك استخدام قائمة لتخزين أسماء المدن:

cities = ["Boston", "Chicago", "Jacksonville"]

أو لتخزين درجات الاختبارات:

test_scores = [55, 99, 100, 68, 85, 78]

دالة تُرجع قائمة (List)

تُظهر الدالة التالية كيفية إرجاع قائمة تحتوي على عشرة أرقام:

def ten_numbers():
numbers = []
for i in range(1, 11):
numbers.append(i)
return numbers

print(ten_numbers())
# result: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

وهذا مثال آخر يوضح تمرير عدة وسائط عند استدعاء الدالة، ثم إرجاعها في قائمة:

def miles_ran(week_1, week_2, week_3, week_4):
return [week_1, week_2, week_3, week_4]

monthly_mileage = miles_ran(25, 30, 28, 40)
print(monthly_mileage)
# result: [25, 30, 28, 40]

الفرق بين الصفوف (Tuples) والقوائم (Lists)

من السهل الخلط بين الصفوف والقوائم، فكلاهما حاويات لتخزين الكائنات. ومع ذلك، تذكر هذه الفروقات الرئيسية:

  • الصفوح (Tuples) غير قابلة للتعديل (immutable).
  • القوائم (Lists) قابلة للتعديل (mutable).

هذا يعني أنه بمجرد إنشاء صف، لا يمكنك إضافة أو إزالة أو تغيير عناصره، بينما يمكنك فعل كل ذلك مع القائمة.

إرجاع قيم متعددة باستخدام القواميس (Dictionaries)

القواميس (Dictionaries) هي هياكل بيانات تخزن البيانات في أزواج من المفاتيح والقيم (key-value pairs)، وتُغلف بأقواس معقوفة {}. كل “مفتاح” (key) فريد وله “قيمة” (value) مرتبطة به. تُعد القواميس مثالية لتمثيل البيانات التي تتطلب ربطاً منطقياً بين عنصرين، مثل اسم الموظف ومنصبه.

مثال على إنشاء قاموس (Dictionary)

لنأخذ قاموساً يمثل الموظفين، حيث يكون اسم الموظف هو المفتاح ومنصبه هو القيمة:

employees = {
"jack": "engineer",
"mary": "manager",
"henry": "writer",
}

دالة تُرجع قاموساً (Dictionary)

إليك كيفية كتابة دالة تُرجع قاموساً يحتوي على زوج من المفتاح والقيمة:

def city_country(city, country):
location = {}
location[city] = country
return location

favorite_location = city_country("Boston", "United States")
print(favorite_location)
# result: {'Boston': 'United States'}

في المثال أعلاه، "Boston" هو المفتاح (key) و "United States" هي القيمة (value). تُظهر هذه الطريقة مرونة القواميس في ربط البيانات بشكل منطقي.

الخلاصة التقنية

لقد استعرضنا في هذا المقال طرقاً متعددة لإرجاع قيم متعددة من الدوال في بايثون، وهي ميزة أساسية تساهم في كتابة كود نظيف وفعال. إن اختيار هيكل البيانات المناسب (Tuple، List، أو Dictionary) يعتمد بشكل كبير على طبيعة البيانات التي يتم التعامل معها ومتطلبات التطبيق. إذا كانت البيانات ثابتة ولا تحتاج إلى تغيير، فالصفوف (Tuples) هي الخيار الأمثل. أما إذا كانت البيانات ديناميكية وتحتاج إلى التعديل والإضافة والحذف، فالقوائم (Lists) توفر المرونة المطلوبة. وعندما تكون هناك حاجة لربط البيانات بأزواج مفتاح-قيمة لسهولة الوصول والفهم، فإن القواميس (Dictionaries) هي الحل الأمثل. فهم هذه الفروقات واختيار الأداة المناسبة في كل مرة سيُمكن المطورين من بناء تطبيقات بايثون أكثر قوة وكفاءة.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *