لا ترمش! انظر كيف تحسن الأساليب السحرية أداء كود Python؟

نص كامل 4790 الكلمات ، المدة المقدرة للدراسة 14 دقيقة

المصدر: Unsplash

يمكن أن يؤدي إتقان بعض المهارات إلى تحسين أداء برامج Python قدر الإمكان ، كما يمكنه تجنب الهدر غير الضروري للموارد. على سبيل المثال ، يمكن أن يؤدي استخدام الأساليب السحرية في Python إلى تحسين أداء التعليمات البرمجية. اليوم ، يعلم Xiaoxin الجميع السحر الذي يمكن أن يحسن أداء برامج الثعبان. تعال وتعلم ~

ما هي الأساليب السحرية؟

الطرق السحرية هي مفاهيم في برمجة Python الشيئية. لديك العديد من الطرق الخاصة لتحديد الفئات لإضافة "قوتها السحرية".

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

ما هي الأساليب السحرية؟

من أجل حل مشكلة نقص وثائق الطريقة السحرية ، قمت بتجميع بعض الأمثلة البسيطة لكيفية استخدام طرق Python السحرية.

المصدر: Unsplash

1. قم بإنشاء كائن dict يقبل فقط الأعداد الصحيحة وأرقام الفاصلة العائمة كقيم لها

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

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

لتحقيق ما سبق ، يتم استخدام الطريقة السحرية التالية:

__int __ و __ setitem __ و __str__

قم أولاً بإنشاء فئة مخصصة تسمى CustomIntFloat ، ثم قم بتمرير الإملاء إلى قائمة وراثة المعلمات. هذا يعني أنه ، باستثناء المكان الذي تختاره لتعديل هذا السلوك ، فإن سلوك إنشاء الكائنات سيكون في الأساس هو نفسه القاموس.

ثم قم بإنشاء طريقة __init__ لإنشاء كائن dict CustomIntFloat. تحتوي قائمة معلمات الكائن على مفاتيح وقيم. يتم تعيينها افتراضيًا على النوع "بلا". والسبب هو أنه إذا قام المستخدم بإنشاء كائن من فئة CustomIntFloat دون تمرير مفتاح أو قيمة ، فسيتم إنشاء إملاء فارغ. لقد أنشأت شرطًا بسيطًا: إذا لم يتم تمرير أي مفتاح ، يتم تعيين المعلمة الرئيسية إلى "بلا" افتراضيًا ، ويتم إنشاء إملاء فارغ بالرجوع إلى كائن CustomIntFloat (مع سمة الفئة blank_dict).

بعد ذلك ، إذا حدد المستخدم مفتاحًا للطول 1 والقيمة المقابلة لمثيل الفئة int أو float ، فسيتم تعيين المفتاح والقيمة في الكائن.

أخيرًا ، في العبارة else ، إذا حدد المستخدم مفاتيح وقيم متعددة ككائنات قابلة للتكرار ، فسيتم استخدام وظيفة zip لضغط الكائن القابل للتكرار وتعيين اسم المتغير المضغوط. أخيرًا ، كرر القيمة المضغوطة وتحقق مما إذا كانت القيمة من النوع int أو float. إذا لم يكن كذلك ، فسيظهر خطأ مخصص CustomIntFloatError.

2. فئة استثناء CustomIntFloatError وطريقة __str__ السحرية

عندما يتم رفع استثناء CustomIntFloatError ، يتم بالفعل إنشاء مثيل لفئة CustomIntFloatError وإخراجها في نفس الوقت.

لذلك ، تتطلب فئة الخطأ المخصصة طرق سحرية __ init __ و __str__. في هذا المثال ، يتم أخذ القيمة التي تم تمريرها وتعيينها كقيمة خاصية في فئة CustomIntFloatError.

هذا يعني أنه عندما يبلغ البرنامج عن خطأ ، يمكن تعيين قيمة init التي تم تمريرها إلى CustomIntFloat إلى خاصية (self.value) في فئة customintflower ، والتي يسهل التحقق منها.

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

وبالمثل ، عند محاولة إنشاء الكائن z (تم التعليق عليه) بمفاتيح وقيم متعددة ، سيتم طرح نفس الاستثناء ، لإعلام المستخدم بأن هناك ثلاثة "إدخالات" غير صالحة هنا.

  • #Z = CustomIntFloat (مفتاح = ، قيمة =)
  • = CustomIntFloat (المفتاح = ، value = )
  • 3. __ setitem __ طريقة سحرية

    يتم استدعاء الأسلوب السحري __setitem __ عند تعيين المفاتيح والقيم في القاموس. بمجرد إنشاء كائن CustomIntFloat ، إذا حاول المستخدم إضافة قيمة غير int أو تعويم ، فسيتم رفع استثناء CustomIntFloatError نفسه. تمت إضافة مقتطف رمز أدناه ، والذي يوضح كيفية تعيين المفاتيح والقيم كما هو متوقع.

  • x = CustomIntFloat ('a'، 1)
  • طباعة (النوع (س))
  • س = 2.1
  • طباعة (x)
  • # س = "ثلاثة"
  • سيؤدي الإدخال غير الصالح إلى استثناء CustomIntFloatError ، كما هو موضح أدناه.

  • classCustomIntFloatError (استثناء):
  • def_init __ (ذاتي ، قيمة):
  • self.value = القيمة
  • def__str __ (ذاتي):
  • returnself.value + 'غير صالح \ n الأعداد الصحيحة والعوامات هي قيم صالحة فقط \ n في CustomIntFloat (dict)'
  • classCustomIntFloat (dict):
  • الفراغ = = {}
  • def__init __ (self ، key = None ، value = None):
  • إذا كان المفتاح لا يوجد:
  • CustomIntFloat.empty_dict = {}
  • eliflen (key) == 1andisinstance (value، (int، float)):
  • dict .__ setitem __ (self ، key ، value)
  • آخر:
  • مضغوط = مضغوط (مفتاح ، قيمة)
  • ل tup في مضغوط:
  • ifisinstance (tup، (int، float)):
  • dict .__ setitem __ (self، tup، tup)
  • آخر:
  • رفع CustomIntFloatError (tup)
  • def__setitem __ (ذاتي ، مفتاح ، قيمة):
  • ifnotisinstance (value، (int، float)):
  • رفع CustomIntFloatError (القيمة)
  • returndict .__ setitem __ (self ، key ، value)
  • 4. ملخص لفئة CustomIntFloat

    المصدر: Unsplash

    من خلال الإرث المدمج في الفصل مثل الإملاء ، يمكنك إعادة تنفيذ السلوك المخصص من خلال الأساليب السحرية. هذا له فوائد عديدة.

    الأهم من ذلك ، لا يحتاج المستخدمون إلى تعلم أي قواعد جديدة. عندما يرغب المستخدمون في إضافة مفاتيح وقيم إلى كائن CustomIntFloatdict ، فإنهم يحتاجون فقط إلى إضافتها بالطريقة المعتادة. والفرق الوحيد هو أنه يُسمح فقط بقيم النوع int و float. إذا حدد المستخدم أي نوع آخر ، فستشير رسالة الخطأ المخصصة بشكل فعال إلى المكان الذي ارتكب فيه المستخدم الخطأ ونوع القيمة المتوقعة.

    5. طريقة السحر السريع لاطلاق النار

    أمثلة باستخدام عوامل حسابية

    __ sub__ ، __add__ ، و __MUL__ (مع __فرنسي مخصص))

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

    عوامل التشغيل مثل + و- و / و * هي طرق متعددة الأشكال. كما هو موضح في موجه Python أدناه ، فإن علامة الجمع (+) متعددة الأشكال ويمكن استخدامها لربط السلاسل وإضافة أعداد صحيحة وقوائم نسخة. هذا ممكن لأن كل هذه الأنواع (str و list و int) لها طريقة إضافة في فئاتها. تقوم Python ببساطة بتحويل الرمز + إلى طريقة __add__ الخاصة بالكائن الطالب (انظر المثال أدناه).

    هذا يعني أنه إذا قمت بتضمين طريقة __إضافة__ في الفصل ، يمكنك استخدام علامة + في الكائن الخاص بك.

    مشغلي الطريقة السحرية في الفصول

    هنا ، قم بإنشاء فئة تسمى NumOperations. تقوم هذه الفئة بإنشاء كائنات NumOperations. عندما يقوم مستخدم NumOperations بتمرير القائمة إلى قائمة المعلمات __init __ ، سيتم تعيين القائمة كسمة في كائن NumOperations وتسميتها math_list.

    عند اكتمال كائن (S) NumOperations ، يمكنك بسهولة استخدام الأساليب السحرية وتحديد الكائنات وعمليات البث الرياضية.

    بمزيد من التفصيل ، تقبل الطريقة السحرية _sub__ كائنين من NumOperations ، وتضغط قوائمهما معًا ، وتتكرر على قوائم المجموعة الأخرى المقابلة. اطرح العنصر الثاني من المجموعة الأولى وقم بإلحاق القيمة بقائمة جديدة تسمى minuslst ثم قم بتمريرها كمعلمة إلى مُنشئ NumOperations.

    الآن ، القيمة المرجعة هي كائن NumOperations جديد.

    يعني استخدام طريقة __sub__ لإجراء هذا البث أنه يمكننا استخدام عامل ناقص (-).

    استخدم الطريقة السحرية __النسخ __ مرة أخرى لإرجاع سلسلة القائمة المعينة في الكائن الجديد. في نفس الوقت ، تم تعديل هذا بحيث عندما يحصل المستخدم على مخرجات كائن NumOperations المتوقعة.

    هذه قائمة حيث تم طرح العناصر من بعضها البعض ؛

    .

    __add__ و __MUL__ كلاهما لهما طريقة تشغيل مماثلة ___ فرعية__ ، ولكن استخدم فهم القائمة لتقليل عدد الأسطر الضرورية من التعليمات البرمجية.

    من أجل استخدام كائنات NumOperation المخصصة ، تم تحديد طرق السحر للطرح والإضافة والضرب مقدمًا.

    يشبه سلوك البث هذا سلوك البث في حزم تحليل البيانات مثل Pandas و Numpy.

    تحتوي طريقتا __إضافة ___ و __مول__ على كائنين NumOperations. وهذا يعني أنه يمكن للمستخدمين استخدام عامل التشغيل plus + وعامل الضرب في نفس الوقت *. ، كما ترى في المثال التالي ، q هي نتيجة x * y ، التي تُرجع كائن NumOperations جديد. عندما نطبع q ، نستخدم تمثيل السلسلة لعملية البث كقائمة.

  • classNumOperations (كائن):
  • def_init __ (self ، math_list):
  • self.math_list = math_list
  • def__sub __ (ذاتي ، أخرى):
  • ناقص =
  • مضغوط = مضغوط (self.math_list ، other.math_list)
  • ل tup في مضغوط:
  • minuslst.append (tup-tup)
  • إرجاع NumOperations (minuslst)
  • def__add __ (النفس ، أخرى):
  • addlst =
  • إرجاع NumOperations (addlst)
  • def__mul __ (النفس ، أخرى):
  • مولست =
  • عمليات العودة (mullst)
  • الدفاع ___ ممثل (النفس):
  • returnstr (self.math_list)
  • س = NumOperations ()
  • y = NumOperations ()
  • ص = س ص
  • ض = س + ص
  • س = س * ص
  • print ('Subtraction:' + str (p))
  • طباعة ('Addition:' + str (z))
  • print ('Multiplication:' + str (q))
  • المصدر: Unsplash

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

    هل هو مذهل؟

    اترك تعليقا

    دعونا نتشارك في السلع الجافة لتعلم وتطوير الذكاء الاصطناعي معًا

    إذا أعيد طبعه ، يرجى ترك رسالة في الخلفية واتباع مواصفات إعادة الطباعة

    زار فوجيان نينغده منطقة ساندو: استئناف المنظم للمجمع لإنتاج اغتنام مدة ونوعية الأمن

    بعثة للألفية الفضاء القادمة لإنقاذ البشرية - العلماء يتآمرون في

    واضاف "انها رواتب جيدة، ولكن أيضا ما الجوائز في نهاية السنة؟"

    الصوت الأساسي اليوم | أكثر ذكاء من تسلا، وهناك القراصنة سيارة؟

    السيطرة على JS console.log وحفظ التعليمات البرمجية الخاصة بك

    VirtualDOM الأموات؟ بعد بالغت الشائعات الرهيبة ......

    اليوم صوت الأساسية | ملاحظة! أكثر من 500 مليون هاتف محمول جديد، تم زرعها سرا طروادة

    مسح شامل! حقول البيانات العلم أفضل الحرة ملخص الكتاب الإلكتروني

    مطور برامج: حول التعلم الآلي ، تعلمت العكس ...

    2019 بايدو الفائزين للمنح الدراسية أعلنت! 7 سنوات حوالي الساعة بايدو "مشاعر التكنولوجيا"

    وجه فائق السرعة منطق معقد حول لهم ولا قوة؟ انها محاولة جوليا

    الصوت الأساسي اليوم | مقدمة التاكسي الجوي! هيونداي وأوبر تطلقان بشكل مشترك مفهوم الطائرات الكهربائية