وظائف
حتى الآن ، كنا نكتب كل الكود الخاص بنا في app.py ، ولكن مع نمو برامجنا ، نحتاج إلى طريقة أفضل لتنظيم الكود الخاص بنا. نحتاج إلى تقسيم الكود الخاص بنا إلى أجزاء أصغر وأكثر قابلية للإدارة وأكثر قابلية للصيانة والتي نسميها وظائف. الوظيفة عبارة عن حاوية لبضعة أسطر من التعليمات البرمجية التي تؤدي مهمة محددة.
على سبيل المثال ، لقد تعلمت بالفعل بعض الوظائف المضمنة في Python print()
و input()
. كل وظيفة لها غرض وتعرف كيفية أداء مهمة محددة. لذلك ، عندما نبني برامج معقدة كبيرة ، يجب علينا تقسيم الكود الخاص بنا إلى أجزاء أصغر قابلة لإعادة الاستخدام ، أي وظائف.
دعونا نفهم هذا المفهوم من خلال بناء برنامج لطباعة رسالة ترحيب.
print('Hi there!')
print('Welcome aboard!')
هنا لدينا برنامج بسيط يتكون من سطرين فقط من التعليمات البرمجية. الآن ، دعنا نقول ، سنحتاجها في برامج أخرى لوضعها في وظيفة يمكننا إعادة استخدامها.
اسمحوا لي أن أقدم كلمة مفتاحية محجوزة def
في Python ، وهو اختصار للتعريف ويستخدم لتعريف وظيفة.
def greet_user():
print('Hi there!')
print('Welcome aboard!')
الآن ستحدد كتلة الكود هذه وظيفة "greet_user
"مع سطور الرموز بعد ذلك. عندما يتم استدعاء هذه الوظيفة ، سيتم تنفيذ هذين السطرين. لنستخدم هذا:
print('start')
greet_user()
print('finish')
يتم تنفيذ البرنامج بالتسلسل ، مما يعني أنه سيتعين عليك تحديد وظيفة قبل استدعائها في البرنامج.
المعلمات
تعمل الوظائف المحددة بشكل مختلف قليلاً عن الوظائف المضمنة في Python. على سبيل المثال ، في حالة print()
وظيفة ، فهي تتطلب بعض المعلومات التي نريد طباعتها ، لكن وظيفة الترحيب الخاصة بنا لا تأخذ أي معلومات. ألن يكون من الأجمل أن تقوم بتمرير اسم المستخدم هنا وبعد ذلك ، بدلاً من قول "مرحبًا" ، يمكنك طباعة اسم المستخدم؟
يمكنك القيام بذلك عن طريق إضافة المعلمات داخل أقواس الوظيفة المحددة. دعني اريك:
def greet_user(name):
print('Hi there!')
print('Welcome aboard!')
الآن "name
"داخل الأقواس سيكون بمثابة متغير محلي ويمكننا تمرير اسم المستخدم عند استدعائه.
greet_user('Shahbaz')
الآن تم تعيين معلمة الاسم على "Shahbaz
". دعونا نغير البرنامج لنستفيد منه.
def greet_user(name):
print(f'Hi {name}')
print('Welcome aboard!')
print('start')
greet_user('Shahbaz')
print('finish')
الشيء المهم الذي يجب ملاحظته هو أن "الاسم" في السطر الأول يسمى Parameter بينما الاسم المقدم أي Shahbaz يسمى وسيطة.
لنبدأ تشغيل هذا البرنامج.
لذلك باستخدام هذه المعلمات ، يمكننا الحصول على معلومات في وظائفنا.
الآن ، لنفعل شيئًا مثيرًا للاهتمام. لنفترض أنك تريد إضافة اسم آخر إلى رسالة الترحيب. انه سهل.
def greet_user(name):
print(f'Hi {name}')
print('Welcome aboard!')
print('start')
greet_user('Shahbaz')
greet_user('Aayush')
print('finish')
لاحظ الآن أنه عندما تحتوي الوظيفة على معلمة ، فإننا ملزمون بتمرير قيمة لتلك المعلمة. إذا قمت بإزالة الاسم من الوظيفة وقمت بتشغيل البرنامج ، فسنحصل على خطأ. يمكنك أيضًا استخدام معلمات متعددة في وظيفة واحدة ، مفصولة بفاصلة.
على سبيل المثال، greet_user(first_name, last_name):
. سيتم أيضًا تنسيق الحجج بشكل مشابه.
وسيطات الكلمات الرئيسية
لقد تعلمنا حتى الآن أنه عندما نحدد معلمات لوظائفنا ، يجب علينا دائمًا توفير القيم وإلا فسوف نحصل على خطأ. في البرنامج الأخير ، الحجج 'Shahbaz'
و 'Bhatti'
تسمى الحجج الموضعية ، مما يعني أن موقفهم أو ترتيب الأمور في البرنامج.
في بايثون ، لدينا نوع آخر من الحجة يسمى وسيطات الكلمات الرئيسية ، والتي لا يهم الموضع فيها. اسمحوا لي أن أريكم كيف يعملون.
انظر إلى البرنامج الأخير. يمكننا تعديله على النحو التالي:
def greet_user(first_name, last_name):
print(f'Hi {first_name} {last_name}')
print('Welcome aboard!')
print('start')
greet_user(first_name='Shahbaz', last_name='Bhatti')
print('finish')
الآن first_name
و last_name
هي معلمات الكلمات الرئيسية. يمكنك تبديل أماكنهم وستكون النتيجة هي نفسها.
الآن هذا لا يعني أنه يجب علينا دائمًا استخدام وسيطات الكلمات الرئيسية. في معظم الأوقات نستخدم الحجج الموضعية ، ولكن في مواقف معينة ، تساعدنا هذه الوسيطات الأساسية على تحسين قابلية قراءة الكود الخاص بنا.
هناك شيء آخر تحتاج إلى معرفته حول وسيطات الكلمات الرئيسية. يجب أن تأتي وسيطات الكلمات الأساسية دائمًا بعد الحجج الموضعية.
بيان العودة
لقد تعلمنا حتى الآن كيفية إنشاء الوظائف وإرسال المعلومات إليها باستخدام معلماتها. الآن دعنا نتعلم كيفية إنشاء وظائف ترجع القيم. يكون هذا مفيدًا بشكل خاص إذا كنت تجري نوعًا من العمليات الحسابية وتريد إرجاع النتيجة إلى أي شخص يستخدم وظيفتك. دعني اريك.
دعنا نحدد الدالة التي ستحسب مربع الرقم.
def square(number):
return number*number
لقد استخدمنا تعليمة الإرجاع لإرجاع هذا الرقم خارج الدالة. الآن ، إذا أطلقنا على هذه الوظيفة ، فإنها ترجع قيمة مثل input()
وظيفة. دعونا نطبعها على المحطة.
يمكنك القول أنه يمكن الحصول على نفس النتيجة دون استخدام بيان الإرجاع. دعونا التحقق من ذلك.
نرى شيئين ، الرقم 9 ولا شيء. ماذا يحصل هنا؟
عندما ينفذ مترجم Python هذا الرمز ، فإنه أولاً سوف يستدعي وظيفة المربع وينتقل عنصر التحكم إلى الوظيفة. هنا نحسب مربع هذا الرقم المعطى ثم نطبعه على الجهاز.
الآن ، بشكل افتراضي ، ترجع جميع الوظائف القيمة لا شيء. لذلك إذا لم يكن لدينا عبارة إرجاع هنا ، فإن Python بشكل افتراضي لا تُرجع أي شيء. لا شيء هو كائن يمثل عدم وجود قيمة. إنه لا يشبه أي شيء أو لا شيء في C و C ++ و Java و Javascript.
يتم إحتوائه!
أتمنى أن تكون قد فهمت أهمية الوظائف.
إنها جانب مهم من تعلم Python إذا كنت تخطط لكتابة برامج كبيرة ومعقدة خلال حياتك المهنية في الترميز.
اترك تعليق