View Categories

4.6. تعريف الدوال

3 دقيقة

جدول المحتويات

4.6. تعريف الدوال #

من أجل فهم موضوع تعريف الدوال ، يمكننا البدء بإنشاء دالة تكتب متسلسلة فيبوناتشي إلى حدّ عشوائي:

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

يؤدي تنفيذ الدالة إلى إنشاء جدول رموز جديد يُستخدم للمتغيرات المحلية للدالة. بتعبير أدق، تُخزّن جميع تعيينات المتغيرات في الدالة قيمتها في جدول الرموز المحلي؛ بينما تبحث مراجع المتغيرات أولًا في جدول الرموز المحلي، ثم في جداول الرموز المحلية للدوال المحيطة، ثم في جدول الرموز العام، وأخيرًا في جدول الأسماء المُدمجة. وبالتالي، لا يمكن تعيين قيمة مباشرة للمتغيرات العامة ومتغيرات الدوال المحيطة داخل دالة (إلا إذا سُميت في جملة عامة للمتغيرات العامة، أو سُميت في جملة غير محلية لمتغيرات الدوال المحيطة)، مع إمكانية الإشارة إليها.

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

يربط تعريف الدالة اسم الدالة بكائن الدالة في جدول الرموز الحالي. يتعرف المفسّر على الكائن المشار إليه بهذا الاسم كدالة مُعرّفة من قِبل المستخدم. يمكن أن تشير أسماء أخرى أيضًا إلى نفس كائن الدالة، ويمكن استخدامها للوصول إليها:

قد تعترض، من لغات برمجة أخرى، على أن fib ليست دالة، بل إجراء، لأنها لا تُرجع قيمة. في الواقع، حتى الدوال التي لا تحتوي على جملة إرجاع تُرجع قيمة، وإن كانت مُملة. تُسمى هذه القيمة None (وهو اسم مُدمج). عادةً ما يُلغي المُفسّر كتابة القيمة None إذا كانت القيمة الوحيدة المكتوبة. يمكنك رؤيتها إذا كنت ترغب بذلك باستخدام دالة print():

من السهل كتابة دالة تُرجع قائمة بأرقام متسلسلة فيبوناتشي، بدلاً من طباعتها:

هذا يوضح هذا المثال، كالعادة، بعض ميزات بايثون الجديدة:

  • ترجع عبارة return قيمة من دالة. أما return بدون وسيطة تعبير، فلا تُرجع أي قيمة. كما أن النزول من نهاية الدالة يُؤدي إلى أنها لا تُرجع أي قيمة.
  • تستدعي العبارة result.append(a) دالة لكائن القائمة result. والدالة هي دالة “تنتمي” إلى كائن وتُسمى obj.methodname، حيث obj هو كائن (قد يكون تعبيرًا)، وmethodname هو اسم دالة مُعرّفة بنوع الكائن. تُعرّف الأنواع المختلفة دالات مختلفة. وقد تحمل دالات الأنواع المختلفة الاسم نفسه دون أي لبس. (من الممكن تعريف أنواع الكائنات والدوالات الخاصة بك باستخدام الفئات، انظر الفئات). الدالة append() الموضحة في المثال مُعرّفة لكائنات القائمة؛ فهي تُضيف عنصرًا جديدًا في نهاية القائمة. في هذا المثال، تُعادل الدالة result = result + [a]، ولكنها أكثر فعالية.
error: Content is protected !!
Scroll to Top