Khalid Altuwairqi
Khalid Altuwairqi

@KAltuwairqi

8 تغريدة 81 قراءة Jul 06, 2020
في هذا الثريد سأشرح python namespace and scopes
قبل نبدأ نشرح, لازم نعرف ماهو الـ name بالنسبة للبايثون؟
والجواب باختصار الـ name عبارة عن identifier نقدر عن طريقه نحدد object, ولا تنسى إن كل شيء في البايثون عبارة عن object!!
سواء كان class,method,variable...
@PrograminLovers
وبالمناسبة, البعض قد يتسائل: لو كانت الFunctions كائنات أو objects فما هو نوعها؟
الجواب :هي من نوع function.
وهذا المقال يشرح الfunction في البايثون ويوضح مفهوم الـfirst-class functions , والذي يسمح للدوال بأن يكون لها attributes وأن تمرر as return value
medium.com
بالتالي الآن نستطيع أن نقول بأن الname في البايثون ما هو إلا reference ويشير إلى memory address ل object معين.
الآن بقي أن نفهم ماهو الـ name space؟
في الحقيقة هو عبارة عن مجموعة من الأسماء تشير إلى كائنات collection of names mapped to objects. أو بعبارة أخرى كأنه dictionary.
البايثون تسمح بوجود عدة namespaces في ذات الوقت , وهذا من شأنه أن يزيد data hiding (مثل في الClosures, الي بناقشها في ثريد لاحق).
أول namespace يكون موجود عند بدء المفسر الخاص بالبايثون ويتضمن كل built-in functions زي الprint,id,type..
أما بالنسبة لnamespaces الأخرى, ففي الواقع كلما ننشأ أو نستورد modulo أو class يقوم بإنشاء global namespace جديد خاص به, أما الlocal namespace فينشأ عند استدعاء الfunctions.
بعد أن استوعبنا ماهو الـnamespace نستطيع الآن فهم ما هو الـ variable scope.
الـvariable scope هو الجزء من الكود الذي يكون فيه متغير variable مرئي ويمكن استعماله أو قراءته.
باختصار, عندما ننشأ متغير (فرضًا x) داخل function فيكون هذا المتغير local ولا يمكن استعماله إلا داخل الدالة.
وحتى نكون صورة أوضح فالمتغير يكون local داخل الـblock الذي أنشأ فيه, فقد يكون if statements, Loop, function..
طبعًا هذه مالم يتم تعريف المتغير على أنه nonlocal أو global.

جاري تحميل الاقتراحات...