Python Single Underscore Usage


هنتكلم عن الاستخدامات المختلفة للـ Single Underscore او العلامة الـ بين الاقواس دي ( _ ).

 

في استخدامات كتيرة للـ Underscore لكن انا مش هطول عليك وهتكلم عن اثنين من أهمهم من وجهي نظري, لان لقيت باقي الاستخدامات قليل انك تقابلها فـ هتكون عامل مشتت اكتر منها مفيد.

 

هنتكلم عن نقطين وهم:

** Separate long digits.

** Private.

 

Separate long digits

لو طلبت منك تكتبلي رقم مكون من 8 ارقام, مثلا, 10050500, هيكون مقروء لكن اسهل القراءة لو كنت كتبته بالشكل ده, 100,50,500.

لو حاولت اكتب نفس الرقم بالطريقة السهلة داخل الـ Python هتعتبر Tuple.

لو انت مش فاكر خليني اذكرك ان الـ Tuple داخل البايثون ليها طريقتين بالكتابة كالتالي:

 

# Tuple
100, 50, 500
# Also a Tuple
(100, 50, 500)

 

ولو حاولنا نستخدم الـ Dots يبقى بنتعامل مع Object وهيظهرلك Error كالتالي:

 

  File "<stdin>", line 1
    100.50.500
             ^
SyntaxError: invalid syntax

 

الحل ان احنا نستخدم الـ Underscore كالتالي:

 

number_var = 100_50_500

 

الـ Python Interpreter هيترجمه لـ 10050500, لكن الـ يقرأ الكود هيكون اسهل عليه فهم الرقم.

 

Private

لو انت عملت Script وكتبت Function اسمها قبله الـ Underscore, الـ Function هتتعامل كـ Private مربوطة بالـ Script المكتوبة جواه لو تم عمل * Import ليها بواسطة script خارجي.

 

امشي معايا بالمثال التالي:

** هـ Create عدد 2 ملف Python

** الملف الاول اسمه script1.py

** الملف الثاني اسمه script2.py

** الملفين داخل نفس الـ Folder

 

داخل الـ script1.py اكتب الكود التالي:

 

def dog():
	print("Parking")

def _human():
	print("Angry")

 

داخل الـ script2.py هنعمل استدعاء لكل خصائص الملف script1.py  باستخدام import, لاحظ التالي:

 ** الـ dog function هيتم استدعائها بشكل عادي

** الـ human function هيتم تعريفها انها مش موجودة

 

from script1 import *

dog()
_human()

 

ده لان الـ Underscore خلت الـ Function لا يمكن استدعائها غير بشكل مباشر, زي الكود التالي:

 

import script1

script1._human()

 

انت مش ملتزم فقط بالـ Functions لكن الموضوع ينطبق على اي ما يمكن يتم تسميته زي الـ class والـ variables, جرب ده بنفسك.

 

لو انت قررت تستخدم الـ Python Keywords زي الـ (class, object, int ,str ... etc) كـ Variables مثلآ, بتكتب الـ Underscore بعد الكلمة:

_class

_object

_int

_str

 

اكيد يفضل انك مش تعمل كده ابدآ لان ده Bad Practices, بس للعلم بيها فقط.