استرجاع مراجع الكائنات من المعرفات المتغيرة في بايثون
تقوم وظيفة id () في بايثون بإرجاع الهوية الفريدة للكائن. من المغري أن نتساءل عما إذا كان من الممكن عكس هذه العملية والحصول على الكائن من معرفه.
على وجه التحديد، نريد التحقق مما إذا كان إلغاء مرجعية معرف المتغير يسترد الكائن الأصلي:
dereference(id(a)) == a
إن فهم مفهوم إلغاء المرجعية وإمكاناتها في بايثون هو أمر أساسي عند تناول هذا السؤال.
إلغاء المرجعية في بايثون
يتضمن إلغاء الإسناد استرداد الكائن أو القيمة الأساسية من معرف متغير. لسوء الحظ، لا توفر بايثون آلية أصلية لإلغاء مرجعية المعرف مباشرة.
النهج الأكاديمي
على الرغم من القيود المفروضة على قدرات بايثون المدمجة، فمن الممكن تطويرها. دالة مساعدة تحاكي معكوس الدالة id(). تستخدم هذه الوظيفة، di()، مجموعة من واجهات برمجة التطبيقات على مستوى C واستدلال النوع لاسترداد مرجع الكائن من معرفه:
import _ctypes
def di(obj_id):
return _ctypes.PyObj_FromPtr(obj_id)
مثال
باستخدام الدالة di()، يمكننا استرداد الكائن الأصلي من معرفه:a = 42 ب = "الإجابة" طباعة (دي (معرف (أ))) # -> 42 print(di(id(b))) # ->answera = 42 b = 'answer' print(di(id(a))) # -> 42 print(di(id(b))) # -> answer
تحذير
على الرغم من أن هذا النهج يوفر فهمًا نظريًا لإلغاء مرجع معرفات المتغيرات في Python، إلا أنه من المهم لاحظ أنه يجب استخدام الدالة di() بحذر بسبب مشكلات محتملة تتعلق بسلامة الذاكرة واستقرارها.تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3