"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > الاستفادة من __slots__ للحصول على أداء أفضل في فئات Python

الاستفادة من __slots__ للحصول على أداء أفضل في فئات Python

تم النشر بتاريخ 2024-11-12
تصفح:348

في كل مرة نقوم بإنشاء فئة جديدة، يقوم Python بتخزين كل سمة في سمة dict والتي تسمى القاموس الديناميكي. يبدو هذا السلوك الافتراضي ملائمًا، لأنه مرن، ولكن عندما تعمل مع عدد كبير من المثيلات أو يكون استخدام الذاكرة مهمًا، فقد يكون هذا الحمل كبيرًا.

Leveraging __slots__ for Better Performance in Python Classes

كيف تعمل "الفتحات

تستخدم بايثون بشكل أساسي قاموسًا لتخزين سمات الفئة، ولكن أحد البدائل هو استخدام الفتحات . من خلال تحديد هذا الاسم، فإننا نطلب من Python استخدام بنية أكثر ثباتًا وإحكامًا مما يقلل بشكل كبير من استخدام الذاكرة. فيما يلي مثال أساسي لكيفية استخدام الفتحات في الفصل الدراسي.

import sys 

class WithoutSlots:
    def __init__(self, x, y):
        self.x = x
        self.y = y

class WithSlots:
    __slots__ = ['x', 'y']

    def __init__(self, x, y):
        self.x = x
        self.y = y

obj1 = WithoutSlots(1, 2)
obj2 = WithSlots(1, 2)

print(sys.getsizeof(obj1.__dict__)) # 296
print(sys.getsizeof(obj2)) # 48

كما هو موضح أعلاه، يستخدم "WithoutSlots" ذاكرة أكبر بكثير مقارنة بـ "WithSlots". فكر في إنشاء العديد من مثيلات الفصل - ما هو النهج الذي سيكون الخيار الأفضل؟

Leveraging __slots__ for Better Performance in Python Classes

القيود

قد تكون الفتحات أداة مفيدة، ولكنها تأتي مع قيود:

    لا توجد سمات ديناميكية
  • : أثناء تحديد الفتحات في نص الفصل، نقوم بتعطيل السمة الافتراضية الخاصة به ( dict )، لذلك لا يمكننا إضافة سمات جديدة ديناميكيًا إلى المثيل بعد إنشائه.
  • obj = معالفتحات(1, 2) obj.z = 3 # سيؤدي هذا إلى ظهور خطأ في السمة
obj = WithSlots(1, 2)
obj.z = 3  # This will raise an AttributeError

الإملاء إلى الفتحة .

  • لا يوجد وراثة متعددة

    : يجب أن تحتوي كل فئة أساسية على فتحات محددة، وإلا ستعود بايثون إلى استخدام القاموس لتخزين سمات المثيل.

  • لا توجد قيمة افتراضية
  • : تحتاج إلى تهيئة القيم الافتراضية بشكل صريح في طريقة init.

متى تستخدمه Leveraging __slots__ for Better Performance in Python Classes

لقد قمت بتدوين بعض أفضل أمثلة السيناريوهات حيث يمكننا استخدام ماكينات القمار:

عندما يكون لدينا الكثير من المثيلات التي يجب إنشاؤها ويكون استخدام الذاكرة مصدر قلق.

    عندما نحتاج إلى تحسين الأداء.
  • عندما يكون لديك سمات معروفة وثابتة.
  • عند العمل مع مجموعات بيانات كبيرة.

الأفكار النهائية Leveraging __slots__ for Better Performance in Python Classes

هذه هي الطريقة التي يتم بها استخدام

الفتحات

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

بيان الافراج تم إعادة إنتاج هذه المقالة على: https://dev.to/conradylx/leveraging-slots-for-better-performance-in-python-classes-2ol4?1 إذا كان هناك أي انتهاك، فيرجى الاتصال بـ [email protected] للحذف هو - هي
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3