كيفية استدعاء وظيفة في Python (مثال)

⚡ ملخص ذكي

وظائف في Python هي عبارة عن كتل برمجية قابلة لإعادة الاستخدام يتم تشغيلها عند استدعائها، ويتم تعريفها باستخدام عبارة def. تقبل هذه الكتل وسائط، وتعيد قيمًا، وتعتمد على مسافة بادئة متسقة لتجميع العبارات التي تنتمي إلى كل دالة.

  • 🧩 بيان التعريف: يتم تعريف الدالة باستخدام def، واسم، وأقواس، متبوعة بنقطتين رأسيتين تفتحان كتلة التعليمات ذات المسافة البادئة.
  • 📞 استدعاء الدوال: كتابة اسم الدالة متبوعًا بأقواس يؤدي إلى تشغيل الكود الخاص بها، لذا يمكن إعادة استخدام نفس المنطق عدة مرات.
  • ⌨️ المسافة الفارغة: Python يقوم بتجميع جسم الدالة عن طريق المسافة البادئة المتسقة بدلاً من الأقواس، لذا فإن وجود مسافة مفقودة يؤدي إلى ظهور خطأ في المسافة البادئة.
  • 🎯 الحجج: تصبح القيم التي يتم تمريرها داخل الأقواس معلمات، وتجعل القيم الافتراضية أو الوسائط الرئيسية كل استدعاء مرنًا.
  • ↩️ القيم المُعادة: تقوم عبارة الإرجاع بإعادة النتيجة إلى المستدعي؛ وبدونها، تُرجع الدالة قيمة None.
  • 🤖 مساعدة الذكاء الاصطناعي: تقوم المساعدات المدعومة بالذكاء الاصطناعي مثل GitHub Copilot بإنشاء هياكل الوظائف والوسائط وسلاسل التوثيق من خلال مطالبة قصيرة.

كيفية استدعاء وظيفة في Python

ما هي الوظيفة في Python?

A وظيفة في Python هو جزء من التعليمات البرمجية يُنفَّذ عند الإشارة إليه. يُستخدم لاستخدام التعليمات البرمجية في أكثر من موضع في البرنامج. ويُطلق عليه أيضًا اسم دالة أو إجراء. Python يوفر العديد من الوظائف المدمجة مثل print() و input() و compile() و exec()، ولكنه يمنحك أيضًا حرية إنشاء وظائفك الخاصة.

كيفية تحديد واستدعاء وظيفة في Python

وظيفة في Python يتم تعريفها بواسطة عبارة "def" متبوعة باسم الدالة والأقواس ( () ).

على سبيل المثال:

لنُعرّف دالةً باستخدام الأمر "def func1():" ثم نستدعيها. سيكون ناتج الدالة "أنا أتعلم" Python وظيفة".

تحديد واستدعاء وظيفة في Python

يستدعي استدعاء الدالة func1() تعريفنا def func1(): ويطبع الأمر "أنا أتعلم" Python الوظيفة لا شيء.

هناك مجموعة من القواعد في Python البرمجة لتحديد وظيفة.

  • يجب وضع أي وسائط أو معلمات إدخال داخل هذه الأقواس.
  • يمكن أن تكون العبارة الأولى للدالة عبارة اختيارية - وهي سلسلة التوثيق أو سلسلة التوثيق الخاصة بالدالة.
  • يبدأ الكود داخل كل دالة بنقطتين رأسيتين (:) ويجب أن يكون مفصولاً بمسافة.
  • تُنهي عبارة `return (expression)` تنفيذ الدالة، مع إمكانية إرجاع قيمة إلى الدالة المُستدعية. وتُعتبر عبارة `return` بدون وسائط مُكافئة لعبارة `return None`.

أهمية المسافة البادئة (الفضاء) في Python

قبل أن نتعرف على Python الوظائف، من المهم أن نفهم قاعدة المسافة البادئة للإعلان عنها Python الوظائف، وهذه القواعد قابلة للتطبيق على عناصر أخرى من Python وكذلك، مثل تعريف الشروط أو الحلقات أو المتغيرات.

Python يتبع أسلوبًا معينًا في المسافة البادئة لتحديد الكود. Python لا تحتوي الدوال على بداية أو نهاية صريحة مثل الأقواس المعقوفة لتحديد بداية ونهاية الدالة، بل تعتمد على المسافة البادئة. لنأخذ مثالًا بسيطًا مع الأمر "print". عند كتابة دالة "print" أسفل سطر def func1(): مباشرةً، سيظهر خطأ "indentation error: expected an indented block".

تحديد واستدعاء وظيفة في Python

الآن، عند إضافة المسافة البادئة (المسافة) أمام دالة "الطباعة"، يجب أن تتم الطباعة كما هو متوقع.

تحديد واستدعاء وظيفة في Python

يكفي استخدام مسافة بادئة واحدة على الأقل لضمان عمل الكود بنجاح. ولكن كأفضل ممارسة، يُنصح بترك مسافة بادئة تتراوح بين 3 و4 مسافات لاستدعاء الدالة.

من الضروري أيضًا، عند تحديد المسافة البادئة، الحفاظ على نفس المسافة البادئة لبقية الكود. على سبيل المثال، في لقطة الشاشة أدناه، عند استدعاء عبارة "still in func1" ولم يتم تعريفها أسفل عبارة الطباعة الأولى مباشرةً، سيظهر خطأ في المسافة البادئة: "unindent does not match any other dentation level".

تحديد واستدعاء وظيفة في Python

الآن، عندما نطبق نفس المسافة البادئة على كلا العبارتين ونقوم بمحاذاتهما على نفس السطر، فإنه يعطي الناتج المتوقع.

تحديد واستدعاء وظيفة في Python

كيف قيمة إرجاع الدالة؟

أمر الإرجاع في Python يحدد هذا الخيار القيمة التي يجب إرجاعها إلى مستدعي الدالة. دعونا نفهم هذا من خلال المثال التالي.

الخطوة 1) لا تقوم الدالة بإرجاع أي شيء

هنا نرى متى لا تُرجع الدالة قيمة. على سبيل المثال، نريد مربع العدد 4، ويجب أن تُعطي الدالة الناتج "16" عند تنفيذ الكود. نحصل على هذا الناتج عند استخدام الكود "print x*x"، ولكن عند استدعاء الدالة "print square"، تُعطي "None" كناتج. هذا لأن استدعاء الدالة لا يُفعّل التكرار، وبالتالي تتوقف الدالة عند نهايتها. Python تُرجع القيمة "لا شيء" عند الخروج من نهاية الدالة.

تحديد واستدعاء وظيفة في Python

الخطوة 2) استبدل أمر الطباعة بأمر تعيين.

ولتوضيح ذلك، سنستبدل أمر الطباعة بأمر إسناد. لنلقِ نظرة على الناتج.

تحديد واستدعاء وظيفة في Python

عند تنفيذ الأمر "print square (4)"، فإنه يُعيد قيمة الكائن. وبما أنه لا توجد لدينا دالة محددة لتنفيذها هنا، فإنه يُعيد القيمة "None".

الخطوة 3) استخدم دالة "return" ونفذ الكود

سنرى الآن كيفية استرجاع الناتج باستخدام الأمر "return". عند استخدام الدالة "return" وتنفيذ الكود، سيُظهر الناتج "16".

تحديد واستدعاء وظيفة في Python

الخطوة 4) قم بتشغيل الأمر "مربع الطباعة"

وظائف في Python هم أنفسهم كائن، والكائن له بعض القيمة. وسنرى هنا كيف Python يتعامل هذا الأمر مع كائن. عند تشغيل الأمر "print square"، فإنه يُعيد قيمة الكائن. بما أننا لم نُمرر أي وسيط، فلا توجد لدينا دالة مُحددة لتشغيلها هنا، لذا يُعيد قيمة افتراضية (0x021B2D30) وهي موقع الكائن. عمليًا Python البرنامج، ربما لن تحتاج إلى القيام بذلك أبدًا.

تحديد واستدعاء وظيفة في Python

الحجج في الوظائف

الوسيط هو قيمة يتم تمريرها إلى الدالة عند استدعائها.

بمعنى آخر، من جانب الاستدعاء يكون وسيطًا، ومن جانب الدالة يكون مُعاملًا.

دعونا نرى كيف Python الحجج فعالة.

الخطوة 1) يتم تعريف الوسائط في تعريف الدالة. عند استدعاء الدالة، يمكنك تمرير قيم تلك الوسائط كما هو موضح أدناه.

تحديد واستدعاء وظيفة في Python

الخطوة 2) لإعلان قيمة افتراضية لوسيط ما، قم بتعيين قيمة له في تعريف الدالة.

تحديد واستدعاء وظيفة في Python

على سبيل المثال: ليس للمتغير x قيمة افتراضية. القيمة الافتراضية للمتغير y هي 0. عند إدخال وسيط واحد فقط عند استدعاء دالة الضرب، Python يُسند القيمة المُعطاة إلى x بينما يبقىping قيمة y تساوي صفرًا. ومن ثم فإن حاصل ضرب x في y يساوي صفرًا.

تحديد واستدعاء وظيفة في Python

الخطوة 3) هذه المرة سنغير القيمة إلى y=2 بدلاً من القيمة الافتراضية y=0، وسيعيد الناتج (4×2)=8.

تحديد واستدعاء وظيفة في Python

الخطوة 4) يمكنك أيضًا تغيير ترتيب تمرير الوسائط Pythonهنا قمنا بعكس ترتيب القيمتين x و y إلى x=4 و y=2.

تحديد واستدعاء وظيفة في Python

الخطوة 5) يمكن أيضًا تمرير عدة وسائط كمصفوفة. في هذا المثال، نستدعي الوسائط المتعددة (1، 2، 3، 4، 5) عن طريق استدعاء الدالة (*args).

على سبيل المثال: لقد قمنا بتعريف الوسائط المتعددة على أنها الأرقام (1،2،3،4،5)؛ عندما نستدعي الدالة (*args)، فإنها تطبع الناتج على أنه (1،2،3،4،5).

تحديد واستدعاء وظيفة في Python

نصيحة:

  • In Python 2.7، لا يدعم النظام تحميل الدوال الزائد. تحميل الدوال الزائد هو القدرة على إنشاء عدة دوال بنفس الاسم ولكن بتنفيذات مختلفة. يتم دعم تحميل الدوال الزائد بشكل كامل في Python 3.
  • يوجد خلط كبير بين الأساليب والدوال. الأساليب في Python ترتبط العناصر بمثيلات الكائنات، بينما لا ترتبط الدوال بها. عندما Python يستدعي أسلوبًا، فهو يربط المعلمة الأولى لذلك الاستدعاء بمرجع الكائن المناسب. بكلمات بسيطة، وظيفة مستقلة في Python هي "وظيفة"، في حين أن الوظيفة التي تعتبر سمة لفئة أو مثيل هي "طريقة".

هنا هو الكامل Python رمز 3

#define a function
def func1():
   print ("I am learning Python function")
   print ("still in func1")
   
func1()

def square(x):
  	return x*x
print(square(4))

def multiply(x,y=0):
	print("value of x=",x)
	print("value of y=",y)
    
	return x*y
  
print(multiply(y=2,x=4))

هنا هو الكامل Python رمز 2

#define a function
def func1():
   print " I am learning Python function"
   print " still in func1"
   
func1()

def square(x):
  	return x*x
print square(4)

def multiply(x,y=0):
	print"value of x=",x
	print"value of y=",y
    
	return x*y
  
print multiply(y=2,x=4)

الأسئلة الشائعة

نعم. أ Python يمكن للدالة أن تُرجع قيمًا متعددة عن طريق فصلها بفواصل بعد كلمة الإرجاع. Python يقوم بتجميعها في مجموعة، والتي يمكن للمستدعي فكها إلى متغيرات منفصلة، ​​على سبيل المثال a, b = func().

يجمع *args الوسائط الموضعية الإضافية في مجموعة، بينما يجمع **kwargs الوسائط الرئيسية الإضافية في قاموس. يسمح كلا الخيارين للدالة بقبول عدد متغير من المدخلات، وتسمية args و kwargs هي مجرد اصطلاح، وليست شرطًا.

سلسلة التوثيق هي سلسلة نصية تُوضع كأول عبارة داخل دالة لتوثيق وظيفتها. تُكتب بين علامتي اقتباس ثلاثيتين، ويمكن قراءتها أثناء التشغيل من خلال الخاصية __doc__ للدالة أو الدالة help().

دالة لامدا هي دالة مجهولة صغيرة تُعرَّف في سطر واحد باستخدام الكلمة المفتاحية لامدا بدلاً من دالة def. وهي مناسبة للمنطق القصير والسريع الذي يُمرَّر إلى دوال مثل map() و filter() و sorted(). انظر هذا وظيفة لامدا يرشد.

نعم. الدالة التي تستدعي نفسها هي دالة تكرارية. يحل التكرار المسائل التي تنقسم إلى مسائل فرعية أصغر متشابهة، مثل حساب المضروب. تحتاج كل دالة تكرارية إلى حالة توقف توقف الاستدعاءات، وإلا Python يُثير خطأً من نوع RecursionError.

يُنشأ المتغير المحلي داخل دالة، ويكون موجودًا فقط أثناء تشغيل تلك الدالة. أما المتغير العام، فيُعرَّف خارج جميع الدوال، ويكون مرئيًا في كل مكان. لتغيير قيمة متغير عام داخل دالة، يجب تعريفه أولًا باستخدام الكلمة المفتاحية `global`.

يقترح GitHub Copilot نصًا كاملاً للدالة من اسمها أو تعليقًا قصيرًا، بما في ذلك المعاملات وعبارات الإرجاع وسلاسل التوثيق. كما يقترح معالجة الحالات الشاذة والاختبارات، مما يتيح لك التركيز على المنطق بدلاً من الكتابة.ping كتل تعريف القوالب الجاهزة.

تُنظّم الدوال شيفرة الذكاء الاصطناعي والتعلم الآلي في خطوات قابلة لإعادة الاستخدام، مثل تحميل البيانات، والمعالجة المسبقة، والتدريب، والتقييم. كما أنها تُبقي التجارب قابلة للقراءة والاختبار، وتُتيح أُطر العمل مثل TensorFlow وscikit-learn الوصول إلى معظم سلوكها من خلال دوال مُسماة بشكل جيد يتم استدعاؤها.

تلخيص هذه التدوينة بـ: