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

مهمة
هناك تعبيران:
_+_
_|_
أي من هذين التعبيرين من المرجح أن يؤدي إلى أخطاء ولماذا؟
ملاحظات التعبيرتجدر الإشارة إلى أن هذه التعبيرات سيئة القراءة ، لا ينصح باستخدام هذه التعبيرات في رمز العمل ، ولكن يمكن استخدامها فقط كغز.
يجب أيضًا أن تتذكر أن
الرموز في المهمة ليست مكتوبة بشكل
زائف (لا تمتثل لمعيار نمط
PEP 8 ).
قرار
في Python ، الشرطة السفلية ليست
كلمة رئيسية ؛ لذلك ، بشكل عام ، يمكن استخدامها لتعيين قيم معينة للمتغيرات.
يتم تقليل المهمة إلى النظر في حالات الأخطاء أثناء الإضافة ومع "bitwise أو" (للإيجاز ، ببساطة "أو") متغير واحد. أي للبحث عن أنواع Python المضمنة (الفئات) التي يتم تنفيذ عملية واحدة منها والبحث عن أنواع مضمنة حيث يتم تنفيذ عملية أخرى.
في وحدة التحكم Python ، من السهل التحقق من وجود قيم تسطير أسفل السطر مثل:
لا يوجد خطأ في تقييم كل تعبير >>> _ = 10 >>> _+_ 20 >>> _ = 10 >>> _|_ 10
لا يوجد خطأ في تقييم التعبير الأول >>> _ = '10' >>> _+_ '1010' >>> _ = '10' >>> _|_ Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unsupported operand type(s) for |: 'str' and 'str'
لا يوجد خطأ في حساب التعبير الثاني >>> _ = {1, 0} >>> _+_ Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unsupported operand type(s) for +: 'set' and 'set' >>> _|_ {0, 1}
يوجد خطأ في حساب كل تعبير >>> _ = {1: 0} >>> _+_ Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unsupported operand type(s) for +: 'dict' and 'dict' >>> _|_ Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unsupported operand type(s) for |: 'dict' and 'dict'
سحر بيثون هو أن تنفيذ الإضافات ، و "أو" ، والمشغلين الآخرين في ما يسمى
"الأساليب السحرية" الموصوفة للفئات المطلوبة.
بالإضافة إلى ذلك ، هذه هي الطريقة
__add__
بالنسبة لـ "أو" هذه طريقة
__or__
يحتوي اسم كل طريقة سحرية على شرطات سفلية ، اثنتان في بداية الكلمة المقابلة وفي نهايتها.
العثور على معلومات حول بيثون الطبقات المدمجة.يمكنك محاولة العثور على المعلومات المطلوبة في الوثائق الخاصة بالأنواع المضمنة على موقع Python الرسمي:
https://docs.python.org/3.7/library/stdtypes.html .
يمكنك التنفيذ في محطة بيثون
>>> import builtins >>> help(builtins)
أفضل استخدام وثائق الإصدار الدقيق لبيثون الذي أستخدمه حاليًا ، في إشارة إلى واجهة الويب لوحدة pydoc.
للقيام بذلك ، في موجه الأوامر ، أدخل ، على سبيل المثال:
python3 -m pydoc -p 3344
وافتح وحدة وثائق المتصفح
http: // localhost: 3344 / buildins.html .
فصول مدمجة يتم من خلالها تطبيق أساليبنا:
تقوم تسعة فصول مدمجة بتنفيذ عملية الإضافة وتنفذ أربعة منها "أو".
بالإضافة إلى ذلك ، يمكنك محاولة التكهن بتكرار استخدام الفئات الأساسية في المشروعات الحقيقية ، والفئات غير الأساسية وتنفيذ الأساليب المذكورة أعلاه لهم. هذا من المرجح أن يكون موضع تقدير إيجابي خلال المقابلة.
الإجابة 1.غالباً ما يؤدي التعبير الثاني إلى خطأ.
أسئلة إضافية ممكنة حول التأكيد على المقابلة
ما هو دور تسطير أسفل السطر في تسمية الكائنات؟
الإجابة 2.يمكن استخدام الشرطة السفلية لفصل الكلمات في
أنماط تسمية كيانات مختلفة في Python :
- عند تسمية في صغيرة
lower_case_with_underscores
- عند التسمية بأحرف كبيرة
UPPER_CASE_WITH_UNDERSCORES
بعض الأسماء المحددة بالشرطات السفلية
محجوزة :
- مع تسطير أسفل السطر في بداية الاسم ، لا يتم استيراده أثناء الاستيراد العام
from module import *
- نظرًا لأن اثنين من الشرطة السفلية على جانبي الاسم يعتبران نظاميين ، فمن غير المستحسن استخدام هذه الأسماء لأغراض أخرى
- مع وجود شرطين سفليين في بداية الاسم ، فإنه يعتبر خاصًا (وليس عامًا) للفصل
ما هو دور تسطير واحد؟
الإجابة 3.في المترجم الشفوي ، إذا لم يتم استخدام تسطير أسفل السطر بشكل صريح كمتغير ، فسيخزن نتيجة الإجراء الأخير الخالي من الأخطاء المعروض على الشاشة.
$ python3 Python 3.6.8 (default, Feb 14 2019, 22:09:48) [GCC 7.4.0] on cygwin Type "help", "copyright", "credits" or "license" for more information. >>> _ Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name '_' is not defined >>> 2 * 5 10 >>> _ 10 >>> _ = 1 >>> _ 1 >>> 2 * 5 10 >>> _ 1
وذلك لأن
sys.stdout يهرب مع عرض
الخط . خذ مثالاً من
الوثائق الرسمية :
def displayhook(value): if value is None: return
بالإضافة إلى ذلك ، يتم استخدام تسطير واحد بشكل شائع لراحة
الاستيعاب .