recent
أخبار ساخنة

الخطوط السفلية في بايثون المبسطة

الصفحة الرئيسية

بعد أن تم إزالة الغموض عن قصصي السابقة حول "حيل" Python "و" Ace Your Python Programming with these Killer features "، وجدت نفسي أعاني مع الشرطات السفلية في Python. تعمقت فيها وقررت كتابتها هنا ، فهذه القصة هي أكثر من ترجمة للشرطات السفلية من مستندات Python الرسمية.

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

1. شرطة سفلية واحدة _

2. شرطة سفلية مزدوجة __

شرطة سفلية واحدة (_)

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

كاسم

يخبر هذا قراء الشفرة بأنك عيّنت اسمًا محددًا حسب الاصطلاح لمتغير لا تنوي استخدامه. على سبيل المثال ، قد لا تكون مهتمًا بالقيمة الفعلية للعداد في حلقات for:

for _ in range(100):
print("Hello, world!")

في Django

يستخدم Django شرطة سفلية واحدة _ كدالة لتمرير السلاسل إليها لأغراض الترجمة. على سبيل المثال من مثال توثيق Django ، النص "Welcome to my site.". تم وضع علامة كسلسلة ترجمة:

from django.http import HttpResponse
from django.utils.translation import gettext as _

def my_view(request):
output = _("Welcome to my site.")
return HttpResponse(output)

لتجنب الالتباس مع الكلمات الرئيسية الافتراضية في Python

تمتلك Python كلماتها الأساسية الافتراضية التي لا يمكن استخدامها كأسماء متغيرات. نستخدم شرطة سفلية بعد الاسم لتجنب هذا النوع من التعارض بين الكلمات الأساسية للغة Python والمتغيرات الخاصة بنا. على سبيل المثال ، إذا كنت تريد تسمية شيء ما len ، من أجل تجنب التظليل على Python's Builtin len ، يمكنك بدلاً من ذلك تسميته len_.

لتمييز المتغير / الوظيفة على أنها خاصة

تشير الشرطة السفلية البادئة قبل اسم المتغير / الوظيفة / الطريقة للمبرمج إلى أنها داخلية فقط ويمكن تغييرها في أي وقت في الفصل.

تعتبر بادئات الاسم ذات الشرطات السفلية هنا خاصة. إذا تم تحديده في استيراد * ، فلن يتم استيراد جميع الأسماء التي تبدأ بـ _. لا تحدد Python الوحدات النمطية الخاصة حقًا ، لذلك يمكن استدعاؤها مباشرة من الوحدات النمطية الأخرى إذا تم تحديدها في __all__.

شرطة سفلية مزدوجة (__)

الشرطات السفلية المزدوجة في بايثون مخصصة فقط للمترجم الفوري.

لإخبار المترجم بإعادة تسميته

تطلب الشرطة السفلية المزدوجة البادئة من مترجم بايثون إعادة كتابة الاسم لتجنب التعارضات في الفئات الفرعية. يعيد المترجم تسمية المتغير كامتداد للفئة ، وهذا ما يسمى mangling. على سبيل المثال ، خذ المثال أدناه:

class BaseClass(object):    # this would convert into _func_a
def _func_a(self):
pass
# this would convert into _BaseClass__func_b
def __func_b(self):
pass

لتجاوز وظائف Python فقط

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

google-playkhamsatmostaqltradent