اهم 20سؤال حول للغه بايثون واجابته وامثله عليه

ما هي بايثون؟

بايثون (Python) هو لغة برمجة عالية المستوى ومفتوحة المصدر، تم تطويرها لتكون سهلة القراءة والكتابة.
لغه بايثون

1-ما هي فوائدها؟

 إليك بعض السمات الرئيسية للغة بايثون

سهولة التعلم والاستخدام:بايثون معروفة ببساطتها وسهولة تعلمها، مما يجعلها مناسبة للمبتدئين وتحتل مكانة قوية في مجال التعليم.

متعددة الاستخدامات:يمكن استخدام بايثون في مجموعة واسعة من التطبيقات، بدءًا من تطوير الويب والبرمجة العلمية إلى التحليل البياني والذكاء الاصطناعي.

مفتوحة المصدر:بايثون هي لغة برمجة مفتوحة المصدر، مما يعني أن مصدر اللغة متاح للجميع للعبث به وتعديله واستخدامه.

دعم كبير للمجتمع:يتمتع بايثون بمجتمع نشط من المطورين، مما يعني وجود العديد من المكتبات والأدوات المتاحة للمستخدمين.

محمولية على مستوى الأنظمة:يمكن تشغيل برامج بايثون على مختلف الأنظمة الأساسية مثل Windows وmacOS وLinux.

بنية بيانية ديناميكية:بايثون تستخدم بنية بيانية ديناميكية، مما يعني أنها لا تتطلب تحديد نوع المتغيرات مسبقًا.

تعدد البرمجة البرمجية البارعة
:تدعم بايثون أساليب متقدمة لتنظيم الشفرة البرمجية والعمل.

2-ما هو PEP 8؟

PEP 8 هو اختصار لـ "Python Enhancement Proposal 8"، وهو وثيقة تقنية في عالم Python تحدد إرشادات الأسلوب للكود في لغة البرمجة بايثون. تم إنشاء هذا المستند لتوحيد أسلوب الكتابة وتحسين قراءة الشفرة وصيانتها، مما يسهل التعاون بين المطورين.

بعض النقاط الرئيسية المغطاة في PEP 8 تتضمن

المسافات والمحافظة على التنسيق:يحدد PEP 8 استخدام المسافات بدلاً من التابات للتنسيق، ويحدد عدد المسافات المستخدمة للتعويض عن التابات.

الطول القياسي للأسطر:يقترح PEP 8 أن يكون طول السطر في الشفرة المصدرية لا يتجاوز 79 حرفًا لتسهيل قراءته في محررات النصوص التي تعرض جداول جانبية.

تنسيق الاستيرادات:يحدد PEP 8 تنسيق استيراد الوحدات وترتيبها، بما في ذلك الفصل بين المكتبات المدمجة وتلك المستوردة من خارج المشروع.

تسميات المتغيرات والدوال:يقترح PEP 8 استخدام الأحرف الصغيرة مع توظيف الشرطة السفلية لفصل الكلمات في تسميات المتغيرات والدوال.

التعليقات والوثائق:يوفر PEP 8 إرشادات حول كتابة التعليقات وإضافة وثائق إلى الشفرة المصدرية.

استخدام الفاصلة بعد الفاصلة:يحدد PEP 8 استخدام الفاصلة بعد الفاصلة (comma-first) في حالة تعدد الوسائط (multi-line)، مما يسهل فحص الفروق في أنظمة إدارة النسخ.

PEP 8 تساهم في إنشاء شفرة نظيفة وقابلة للصيانة وسهلة القراءة، وتعد هذه الإرشادات موارد قيمة للمطورين الذين يعملون بلغة البرمجة بايثون.

3-ما هو التخليل والتفكيك؟

في بايثون، تشير كلمتا "التخليل" و"إلغاء التسلسل" إلى عملية تسلسل الكائنات وإلغاء تسلسلها، على التوالي.
تُستخدم هذه العمليات بشكل شائع لتخزين واسترجاع هياكل أو كائنات البيانات المعقدة.


التخليل هو عملية تحويل كائن بايثون إلى دفق بايت. يمكن تخزين دفق البايت هذا في ملف أو إرساله عبر الشبكة.
الوحدة: يتم تنفيذ عملية التخليل في المقام الأول باستخدام وحدة المخلل في بايثون.
الاستخدام:

import pickle
بيانات = {'الاسم': 'جون', 'العمر': 30, 'المدينة': 'نيويورك'}
# حفظ البيانات في ملف باستخدام pickle
with open('data.pickle', 'wb') as ملف:
pickle.dump(بيانات, ملف)
التفكيك: التعريف: Unpickling هي عملية إعادة بناء كائن Python من دفق بايت.
الوحدة النمطية: تُستخدم وحدة المخلل أيضًا في عملية التفكيك.
الاستخدام:

import pickle
# تحميل البيانات من الملف باستخدام pickle
with open('data.pickle', 'rb') as ملف:
تم_تحميل_البيانات = pickle.load(ملف)
print(تم_تحميل_البيانات)
يعد التخليل والتفكيك مفيدًا لسيناريوهات مثل حفظ حالة الكائن، وإرسال الكائنات بين العمليات أو الأنظمة المختلفة، والتخزين المؤقت.
من المهم ملاحظة أنه على الرغم من أن التخليل هو وسيلة مناسبة لتسلسل الكائنات، إلا أنه قد لا يكون آمنًا لمصادر البيانات غير الموثوق بها، حيث أن إلغاء التقاط البيانات من مصادر غير موثوقة يمكن أن يشكل مخاطر أمنية (على سبيل المثال، تنفيذ تعليمات برمجية عشوائية). 
كن حذرًا دائمًا عند جمع البيانات من مصادر غير موثوقة أو غير مصادق عليها.

4-كيف يتم تفسير بايثون

تفسير لغة البرمجة بايثون يتم بواسطة مترجم Python الذي يقوم بتحويل الشفرة المصدرية (الكود البرمجي الذي يكتبه المطور) إلى لغة يفهمها الحاسوب. 

هناك اثنين من الطرق الرئيسية لتفسير بايثون

تفسير طويل:يمكنك تفسير كود بايثون باستخدام المترجم الطويل (CPython)، وهو النسخة الرسمية للغة بايثون. 
يقوم CPython بتحويل الشفرة المصدرية إلى بايت كود (byte code)، ويتم تنفيذ هذا البايت كود باستخدام آلة افتراضية تسمى "آلة الشفرة البرمجية" (Code Virtual Machine - CVM).

تفسير تفاعلي:يمكنك أيضًا استخدام تفسير تفاعلي لبايثون، وهو بيئة تفاعلية حية حيث يمكنك كتابة الشفرة المصدرية ورؤية النتائج فورًا. 
يمكنك الوصول إلى التفسير التفاعلي باستخدام الأمر python في سطر الأوامر أو python3، ثم سيظهر لك التفسير مع مؤشر ينتظر إدخال الأوامر.
على سبيل المثال:
$ python 
Python 3.x.x (version may vary) 
Type "help",
         "copyright", 
         "credits" or 
         "license" for more information.
بعد ذلك، يمكنك بدء كتابة الشفرة المصدرية مباشرة في التفسير التفاعلي ورؤية النتائج فورًا.
بايثون هو لغة برمجة مفسرة (interpreted)، وليس من الضروري تجميع الشفرة إلى كود آلي (machine code) كما يحدث في لغات البرمجة المفسرة. هذا يسهل على المطورين تطوير واختبار البرامج بشكل أسرع.

5-كيف تتم إدارة الذاكرة في بايثون؟

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

النقاط الرئيسية لإدارة الذاكرة في بايثون تشمل: إدارة الذاكرة التلقائية:بايثون يستخدم نظامًا لإدارة الذاكرة يُسمى "Garbage Collection" (التجميع الضائع) الذي يتتبع الكائنات التي لم تعد قابلة للوصول ويقوم بتحرير مساحة الذاكرة التي تحتلها هذه الكائنات.
Reference Counting:العد الإشاري هو أسلوب يعتمد على تعيين عدد إشارات (References) لكل كائن في الذاكرة. عندما يصبح عدد الإشارات صفرًا، يعتبر الكائن غير قابل للوصول ويتم حذفه تلقائيًا.
التجميع الضائع الجيليني (Generational Garbage Collection):يقوم نظام التجميع الضائع الجيليني بتقسيم الكائنات إلى أجيال مختلفة استنادًا إلى مدى استمراريتها. يتم جمع الكائنات التي تكون غير مستمرة بشكل أكبر بشكل دوري، مما يقلل من تأثير عملية جمع القمامة على أداء البرنامج.
مكتبات التوجيه (Memory Management Libraries):توفر بايثون واجهات لمكتبات إدارة الذاكرة مثل PyMalloc لتحسين أداء البرامج عند العمل مع كميات كبيرة من البيانات.
استخدام مكتبات الإدارة اليدوية:يمكن استخدام مكتبات مثل ctypes للتفاعل مع رموز البرنامج المتكونة بلغات مثل C للتحكم اليدوي في إدارة الذاكرة في حالات خاصة.
معظم المطورين لا يحتاجون إلى التدخل المباشر في إدارة الذاكرة في بايثون، ولكن فهم هذه العمليات يمكن أن يكون مفيدًا لتحسين أداء البرامج وتجنب مشاكل الذاكرة.

6-ما هي الأدوات التي تساعد في اكتشاف الأخطاء أو إجراء التحليل الثابت؟

هناك العديد من الأدوات المفيدة في عالم بايثون التي تساعد في اكتشاف الأخطاء وتحليل الشفرة البرمجية. 

إليك بعض الأدوات الشائعة:
Pylint:Pylint هو أداة لتحليل الشفرة البرمجية واكتشاف الأخطاء والأسلوب غير المناسب. 
يقوم بتقييم جودة الشفرة ويوفر تقارير تفصيلية حول الأخطاء والتحسينات المحتملة.
Pyflakes:Pyflakes هو مفحص خفيف الوزن يتحقق من الشفرة البرمجية لاكتشاف الأخطاء والتحذيرات. 
يتميز بالسرعة والبساطة.
Mypy:Mypy هو أداة للتحقق من نوع الشفرة (Type Checking) في بايثون. 
يساعد في تجنب الأخطاء المرتبطة بأنواع البيانات في وقت التشغيل.
Black:Black هو أداة تنسيق تلقائي للشفرة. يقوم بتنسيق الشفرة بشكل آلي وفقًا لقواعد محددة. 
مما يساعد في تحسين قراءة الشفرة والحفاظ على تنسيق موحد.
Bandit:Bandit هو أداة لاكتشاف الثغرات الأمانية في الشفرة البرمجية باستخدام تحليل ثابت للشفرة.
Coverage.py:Coverage.py تستخدم لقياس تغطية الشفرة. 
حيث يمكنك رصد أي جزء من الشفرة قد تم تنفيذه أثناء تشغيل البرنامج.
عارض الشفرة (Code Linters):Linters مثل Flake8 وProspector يقومون بدمج عدة أدوات لتحليل الشفرة مثل Pyflakes و Pycodestyle وMcCabe. 
يقدمون نتائج مجمعة لتحليل الشفرة.
عارض المراجعات (Code Review Tools):أدوات مراجعة الشفرة مثل GitHub Code Review أو GitLab Merge Requests
 يمكن أن تساعد في مراجعة الشفرة واكتشاف الأخطاء قبل الدمج.

استخدام هذه الأدوات يساعد في تحسين جودة الشفرة وزيادة الإنتاجية، حيث تساعد في اكتشاف الأخطاء المبكرة وتعزيز الممارسات الجيدة في البرمجة.

7-ما هي برامج الديكور بايثون؟

في لغة Python، تعد أدوات الديكور ميزة قوية ومرنة تسمح لك بتعديل أو توسيع سلوك الوظائف أو الأساليب دون تغيير التعليمات البرمجية الفعلية الخاصة بها. 

أدوات الديكور هي وظائف بحد ذاتها ويتم تطبيقها باستخدام بناء الجملة "@".
يأخذ مصمم الديكور وظيفة كمدخل ويعيد وظيفة جديدة تعمل عادةً على توسيع أو تعديل سلوك الوظيفة الأصلية. تُستخدم أدوات الديكور بشكل شائع لمهام مثل التسجيل والتخزين المؤقت والتحكم في الوصول والمزيد.
إليك مثال بسيط لمصمم الديكور:

تعريف my_decorator(func):
غلاف التعريف ():
طباعة ("يحدث شيء ما قبل استدعاء الوظيفة.")
وظيفة ()
طباعة ("يحدث شيء ما بعد استدعاء الوظيفة.")
غلاف العودة
@my_decorator
بالتأكيد say_hello():
طباعة ("مرحبا!")
# استخدام الدالة المزخرفة
قل مرحبا()

في هذا المثال، my_decorator هي دالة ديكور تأخذ دالة أخرى (func) كوسيطة، وترجع دالة جديدة (غلاف). تحتوي وظيفة التضمين على السلوك الإضافي الذي تريد إضافته قبل وبعد استدعاء الوظيفة الأصلية.
إن صيغة @my_decorator هي طريقة مختصرة لتطبيق الديكور على الدالة say_hello. إنه يعادل كتابة say_hello = my_decorator(say_hello).
عند استدعاء say_hello، سيتم تنفيذ السلوك المعدل الذي يوفره مصمم الديكور.

تعد أدوات الديكور مفهومًا أساسيًا في لغة بايثون وتستخدم على نطاق واسع في أطر العمل والمكتبات المختلفة لتعزيز وظائف الوظائف والأساليب. أنها توفر طريقة نظيفة وقابلة لإعادة الاستخدام لتوسيع سلوك التعليمات البرمجية.

8-ما الفرق بين القائمة والصفوف؟

إليك توضيح لكل من مصطلحي "القائمة" و"الصفوف":

القائمة (List):في سياق لغات البرمجة وهياكل البيانات، القائمة هي ترتيب مرتب من العناصر حيث يمكن الوصول إليها بواسطة مؤشر (index) أو مفتاح (key)، ويتم تمثيلها بين قوسين مربعين []. 
العناصر في القائمة يمكن أن تكون من أنواع مختلفة، ويمكن تغييرها بسهولة. مثال:python code
my_list = [1, 2, 3, 4, 5]

الصفوف (Rows):في سياق قواعد البيانات أو الجداول، يشير مصطلح "الصف" إلى سجل فردي يحتوي على بيانات لعدة متغيرات أو أعمدة. 
على سبيل المثال، إذا كان لديك جدول لتخزين معلومات حول الطلاب، فإن كل صف يمثل طالبًا فرديًا ويحتوي على بيانات مثل الاسم والعمر والدرجات.diff code

| الاسم | العمر | الدرجة | 
|--------|------|--------| 
| أحمد | 20 | 85 | 
| سارة | 22 | 92 | 
| محمد | 21 | 78 |

في هذا المثال، كل صف يمثل طالبًا والأعمدة تحتوي على معلومات محددة حول كل طالب.

9-كيف يتم تمرير الوسائط حسب القيمة أو حسب المرجع؟

في لغات البرمجة، يتم تمرير الوسائط (المتغيرات أو القيم) إلى الدوال أو الوظائف بإحدى الطرقين: حسب القيمة (Pass by Value) أو حسب المرجع (Pass by Reference). 

إليك شرح للفرق بينهما:
حسب القيمة (Pass by Value):يعني أن القيمة الفعلية للمتغير تتم نسخها وتمرير النسخة إلى الدالة.
أي تغيير تحدث داخل الدالة لا يؤثر على القيمة الأصلية للمتغير خارج الدالة.
هذا النمط شائع في لغات البرمجة مثل C وC++.
 code
void increment(int x) { x = x + 1; } 
 int main() { int number = 5; 
 increment(number); 
    // قيمة "number" لا تتغير (تبقى 5) 
 return 0; }

حسب المرجع (Pass by Reference):يعني أن المرجع إلى المتغير يتم نقله إلى الدالة، مما يتيح للدالة الوصول إلى القيمة الفعلية للمتغير.
أي تغيير تحدث داخل الدالة يؤثر على القيمة الأصلية للمتغير خارج الدالة.
هذا النمط شائع في لغات البرمجة مثل Python وJavaScript.

python code
def increment(x): 
 x[0] = x[0] + 1 
 number = [5] increment(number) 
 # القيمة "number" تتغير (تصبح [6])

يرجى مراعاة أن هناك بعض اللغات تدعم نمطين معًا أو تقدم تفسيرات مختلفة لهذه النماذج.

10-ما هو فهم الإملاء والقائمة؟

يبدو أنه قد يكون هناك ارتباك بسيط في المصطلحات المستخدمة في السؤال. يشير مصطلح "التهجئة" عادةً إلى التهجئة أو تكوين الكلمات بشكل صحيح، في حين أن "فهم القائمة" هو مفهوم برمجي في بايثون.

اسمحوا لي أن أشرح كلا المصطلحين:

الإملاء:
تشير كلمة "التهجئة" في سياق اللغة إلى القدرة على تكوين الكلمات بشكل صحيح عن طريق ترتيب الحروف بالتسلسل الصحيح. 
على سبيل المثال، تتضمن كتابة كلمة "كمبيوتر" بشكل صحيح ترتيب الأحرف "c" و"o" و"m" و"p" و"u" و"t" و"e" و"r" بالترتيب الصحيح .
قائمة في بايثون:
يعد فهم القائمة طريقة مختصرة لإنشاء قوائم في بايثون. يوفر بناء جملة أكثر قابلية للقراءة وتعبيرًا لإنشاء قوائم بناءً على العناصر التكرارية الموجودة (القوائم والسلاسل وما إلى ذلك) وتطبيق بعض العمليات على كل عنصر.
بناء الجملة الأساسي لفهم القائمة هو [تعبير عن عنصر قابل للتكرار إذا كان الشرط].
فيما يلي مثال بسيط لإنشاء قائمة مربعات للأرقام الزوجية من 0 إلى 9:

المربعات = [x**2 لـ x في النطاق(10) إذا x % 2 == 0]
طباعة (المربعات)
سيكون الناتج [0، 4، 16، 36، 64]، حيث كل رقم هو مربع الرقم الزوجي من 0 إلى 9.

11-ما هي الأنواع المضمنة التي توفرها بايثون؟

في Python، يتيح لك استخدام الأنواع المضمنة (Built-in Types) لتمثيل البيانات بطرق مختلفة.
إليك بعض الأنواع المضمنة الأساسية في Python:
أنواع الأعداد:int: لتمثيل الأعداد الصحيحة (مثل 5 و -3).
float: لتمثيل الأعداد العشرية (مثل 3.14 و -0.5).
complex: لتمثيل الأعداد التعقيدية (مثل 2 + 3j).
نصوص (Strings):str: لتمثيل النصوص، حيث يمكن أن تكون سلسلة من الأحرف (مثل "Hello, World!").
تمثيل البيانات البولية:bool: لتمثيل القيم البولية True أو False.
أنواع البيانات المتسلسلة:list: لتمثيل قوائم متسلسلة من العناصر (مثل [1, 2, 3]).
tuple: لتمثيل أزواج من القيم، وهي غير قابلة للتغيير بعد الإنشاء (مثل (1, 2)).
set: لتمثيل مجموعات غير متسلسلة من العناصر (مثل {1, 2, 3}).
dict: لتمثيل القواميس أو الهياكل التي تحتوي على أزواج "مفتاح-قيمة" (مثل {"اسم": "أحمد", "عمر": 25}).
NoneType:None: لتمثيل القيمة None التي تعبر عن العدم.

هذه بعض الأنواع المضمنة الرئيسية في Python. يمكنك استخدام هذه الأنواع لتمثيل وتخزين البيانات بطرق مختلفة في اللغة.

12-شرح مساحة الاسم في بايثون

مساحة الأسماء في Python تشير إلى المكان الذي يمكن فيه استخدام اسم (مثل اسم متغير أو اسم دالة) في الكود. في Python، يتم تحديد مساحة الأسماء باستخدام المستوى الداخلي للتقنيات المختلفة.

إليك بعض المفاهيم المتعلقة بمساحة الأسماء في Python:

النطاق (Scope):النطاق يحدد مدى رؤية وصلاحية الأسماء في الكود. هناك نطاقات مختلفة مثل النطاق العالمي (global) والنطاق المحلي (local).
النطاق العالمي (Global Scope):الأسماء التي تتم تعريفها خارج أي دالة أو كتلة أخرى تعتبر في النطاق العالمي. يمكن الوصول إليها من أي مكان في البرنامج.
python code
x = 10 
 # هنا x في النطاق العالمي 
 def my_function(): 
 print(x) 
 # يمكن الوصول إلى x هنا

النطاق المحلي (Local Scope):الأسماء التي تتم تعريفها داخل دالة أو كتلة أخرى تعتبر في النطاق المحلي. يمكن الوصول إليها داخل هذا النطاق فقط.
python code
def my_function(): 
 y = 5 
 # هنا y في النطاق المحلي 
 print(y) 
 my_function() 
 # print(y) # يؤدي إلى خطأ، لأن y ليست متاحة في هذا النطاق

المفهومية (Enclosure):في حالة وجود دوال مدمجة (nested functions)، يمكن للدالة الداخلية الوصول إلى متغيرات الدالة الخارجية.
python code
def outer_function(): 
 z = 8 def inner_function(): 
 print(z) 
 # يمكن للدالة الداخلية الوصول إلى z من الدالة الخارجية inner_function() outer_function()

تتغير مساحة الأسماء باعتبار النطاق والطريقة التي يتم بها تنظيم الأسماء في البرنامج. يتيح لك هذا النظام تنظيم البرامج والتحكم في وصول الأسماء في مختلف السياقات.

13-ما هو لامدا في بايثون؟

لامبدا (Lambda) في Python تُعتبر وسيلة لإنشاء وظائف صغيرة مجهولة الاسم (anonymous functions). تعد الوظائف المجهولة الاسم أو اللامبدا مناسبة للاستخدام في حالات حيث يكون استخدام دالة كاملة ذات اسم غير ضروري.

بصورة عامة، يتم استخدام لامبدا عندما تحتاج إلى دالة بسيطة لفترة قصيرة ولا تحتاج إلى تعريفها باستخدام الكلمة الرئيسية def. صيغة لامبدا هي:
python code
lambda arguments: expression

حيث arguments هي قائمة بالمتغيرات التي يمكن تمريرها إلى اللامبدا، و expression هي التعبير الذي يتم حسابه وإرجاعه.

إليك مثال بسيط:
python code

 # تعريف لامبدا لجمع اثنين من الأرقام 
add = lambda x, 
y: x + y result = add(3, 5) 
print(result) 
 # الطباعة تعطي 8

في هذا المثال، تم استخدام لامبدا لإنشاء دالة صغيرة للجمع بين اثنين من الأرقام.

14-لماذا لا تحتوي نماذج لامدا في بايثون على عبارات؟

لامبدا في Python تُستخدم لإنشاء وظائف صغيرة مجهولة الاسم (anonymous functions)، ولكن لا تحتوي على عبارات أخرى سوى تعبير واحد. هذا يتيح للامبدا أن تكون وظيفة بسيطة وصغيرة جداً.

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

هناك حاجة لتجنب تعريفات كبيرة ومعقدة في لامبدا، والتي تحقق عادةً بشكل أفضل باستخدام دوال مسماة بشكل كامل باستخدام def.

15-شرح pass في بايثون

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

في السياقات التي يُشترط فيها وجود بيان ولكن ليس هناك حاجة لأي إجراء، يُستخدم pass لتجنب الأخطاء في تنفيذ الكود. 
على سبيل المثال:
python code

if condition: 
  # هنا يجب وجود بيان، ولكن لا نحتاج إلى فعل أي شيء 
 pass else: 
  # الكود الذي يتم تنفيذه عندما تكون الشرطية غير صحيحة 
 print("Condition is False")

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

16-ما هي التكرارات في بايثون؟

في Python، يُشير مصطلح "التكرارات" إلى الهياكل التي تسمح لتنفيذ مجموعة من البيانات أو الأوامر لعدة مرات. هناك عدة طرق لتحقيق التكرار في Python، وأحد أهم الهياكل لهذا الغرض هو استخدام حلقات (Loops). 
يوجد نوعان رئيسيان من حلقات في Python:

حلقة for:تُستخدم لتكرار عبر مجموعة من العناصر (مثل قائمة أو سلسلة).

python code

for item in iterable: 
 # البيانات أو الأوامر التي تُنفذ في كل تكرار
مثال:
python code

fruits = ["تفاحة", "موز", "فراولة"] for fruit in fruits: print(fruit)

الناتج: code
تفاحة موز فراولة

حلقة while:تُستخدم لتكرار مجموعة من البيانات أو الأوامر حتى تصبح شرطية معينة غير صحيحة.
python code

while condition: 
 # البيانات أو الأوامر التي تُنفذ في كل تكرار

مثال:
python code

count = 0 while count < 5: print(count) count += 1

الناتج: code

0 1 2 3 4

يتيح استخدام التكرارات في Python تكرار تنفيذ الأكواد بشكل فعال، سواء كان ذلك عبر مجموعات من العناصر أو بناءً على شروط محددة.

17-ما هي الوحدة في بايثون؟

في Python، يُشير مصطلح "الوحدة" إلى ملف يحتوي على كود Python. الوحدة تعتبر وحدة تنظيمية لتنظيم وإدارة الكود. يمكنك فهمها بأنها ملف Python يحتوي على مجموعة من التعريفات والأوامر.

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

على سبيل المثال، افترض أن لديك ملف يسمى my_module.py يحتوي على الكود التالي:
python code
# my_module.py 
 def greet(name): return f
    "Hello, {name}!" 
 if __name__ == "__main__": 
     print(greet("John"))


ثم يمكنك استيراد هذه الوحدة في ملف Python آخر باستخدام
python code
 import:
# another_file.py 
import my_module 
 print(my_module.greet("Alice"))    

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

18-شرح التقطيع في بايثون؟

التقطيع (Slicing) في Python هو عملية استخدام جزء فرعي من تسلسل (sequence)، مثل قائمة (List) أو سلسلة نصوص (String). يُمثل التقطيع جزءًا من التسلسل بواسطة تحديد نطاق من المؤشرات (الفهرس)، ويسمح بالوصول إلى العناصر داخل هذا النطاق.

صيغة التقطيع هي:
python code
sequence[start:stop:step]


حيث:start: المؤشر الذي يبدأ منه التقطيع (يشمل).
stop: المؤشر الذي ينتهي عنده التقطيع (لا يشمل).
step: الخطوة بين العناصر (اختياري، إذا تم تركه فإنه يفترض القيمة 1).

القيم الافتراضية:إذا تم ترك start فإنه يفترض القيمة 0.
إذا تم ترك stop فإنه يفترض نهاية التسلسل.
إذا تم ترك step فإنه يفترض القيمة 1.

لنقدم بعض الأمثلة:
Python code

my_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
 # التقطيع من العنصر الثالث حتى العنصر السادس (لا يشمل) 
subset = my_list[2:6] 
print(subset) 
 # الطباعة تعطي: [2, 3, 4, 5]
 # التقطيع بخطوة 2 
subset_step_2 = my_list[1:8:2] 
print(subset_step_2) 
 # الطباعة تعطي: [1, 3, 5, 7]


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

19-ما هي generatorفي بايثون؟

في Python، مصطلح "generator" يشير إلى نوع خاص من الكائنات (objects) التي يمكنها إنشاء تسلسل من القيم على مراحل. الـ generators يستخدمون عادة لتوليد مجموعة كبيرة من القيم بشكل فعال من حيث استهلاك الذاكرة.

الـ generator يستخدم الكلمة الرئيسية "yield" بدلاً من "return" لإرجاع القيم، ولكنه يحافظ على حالة الدالة (function) بين مرات الاستدعاء، وهذا يتيح للـ generator استئناف تنفيذه من حيث توقف في كل مرة.

إليك مثال بسيط لفهم الـ generator في  code

Python code

def simple_generator(): 
 yield 1 
 yield 2 
 yield 3 
  # إنشاء generator object 
my_generator = simple_generator() 
  # استخدام next() للحصول على القيم 
print(next(my_generator)) # الطباعة: 1 
print(next(my_generator)) # الطباعة: 2 
print(next(my_generator)) # الطباعة: 3 
 # إذا حاولنا next() بعد هذه النقاط، سيتم رفع استثناء StopIteration للإشارة إلى نهاية الgenerator. 
 # يمكن أيضاً استخدامه في loop 
for value in simple_generator(): 
 print(value) 
 # الطباعة:
 #1 
 # 2 
 # 3

هذا هو مثال بسيط، والـ generators يمكن أن تستخدم لتوليد مجموعات من القيم بطريقة فعالة، ويمكن استخدامها في حالات تتطلب التكامل التدريجي وتوفير استهلاك منخفض للذاكرة.

20-ما هو docstring في بايثون؟

في Python، docstring هو سلسلة نصية (string) تستخدم لوصف وثائق (documentation) لدالة أو طريقة أو وحدة برمجية. يتم وضع docstring كأول تعليق في جسم الكود لهذه الكائنات.

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

فيما يلي مثال بسيط على كيفية استخدام docstring في  code

Python code

def add_numbers(a, b):
 """ 
 This function adds two numbers. 
 Parameters: 
 a (int): The first number. 
 b (int): The second number. 
 Returns: 
 int: The sum of a and b. 
 """ 
 return a + b


في هذا المثال، النص الذي يبدأ وينتهي بثلاث علامات تنصيص مزدوجة (""") هو docstring. 
يتم استخدام تلك الوثائق من قبل أدوات التوليف (documentation tools)، ويمكن أيضًا الوصول إليها باستخدام بعض الوظائف المدمجة مثل help().

من الجيد أن تكون عادة docstrings واضحة وموجزة، مما يساعد المطورين الآخرين (ونفسك) في فهم الكود بشكل أفضل واستخدامه بشكل صحيح.

المصادر:-

إرسال تعليق

أحدث أقدم

نموذج الاتصال