بيثون وC ++ مكرر مكرر، وتحول أكبر الفرق إلى أن تكون ......

الكاتب | يو يينغ البيت

ذبيان | (شينخوا)

مقدمة

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

لذا، فإن مكرر ما هو مفهوم؟ وماذا لو كان موجودا على نطاق واسع في مجموعة متنوعة من لغات البرمجة؟ ويستند هذا المقال على C ++ وبايثون، مناقشة متعمقة لهذه السلسلة من الأسئلة.

ما هو مكرر؟ لماذا نريد استخدام مكرر؟

ما هو مكرر؟ عندما يبدأ في تعلم بايثون، وسوف مكرر يمكن أن تفهم على أنها مكان "لالثلاثون في ..." و "..." ما هو الموقف، وبعد مع مزيد من الدراسة، تعلمت أن مكرر هو تنفيذ التكرار الهدف من البروتوكول، تعلم C ++، تعلمت أن مكرر هو عمل والكائن مؤشر مماثل ...

في الواقع، يرتبط مكرر مع التجريد مكرر (مكرر نمط) ولدت، والغرض منه هو فصل وصول موحدة للهياكل بيانات مختلفة حيث وضع البيانات، بحيث الوظائف المختلفة المطلوبة للوصول إلى بنية البيانات، ل قد تبقى هياكل البيانات المختلفة واجهة واحدة.

في العديد من المناقشات بيثون الكتب مكرر والمقالات، وأرى أن هذا رأيين: يتم إنشاء 1. مكرر لتوفير بنية بيانات الذاكرة. 2. اجتياز مكرر أعلى كفاءة.

(وحدة مثل مؤشرات الملفات، عد itertools، ودورة وغيرها من التكرارات لانهائي) أولا، بالإضافة إلى بعض من بنية البيانات لم يتم تعريف على مكرر، يتم تعريف التكرارات الأخرى في بعض: هاتين النقطتين هي استنتاجات دقيقة للغاية هيكل البيانات، وعدم وجود مزايا توفير الذاكرة، وثانيا، لأن التكرار هو تحقيق درجة عالية من التعميم، فإنه يتطلب في كل تكرار للقيام بعمل إضافي المحمول (على سبيل المثال، بيثون كاشف يتطلب استهلاك ثابت ما إذا كان مكرر القيام به، وشذوذ الرصد؛ الاحتياجات حاوية صف مزدوج الذيل C ++ من الذاكرة متعددة المراحل كومة متقطعة من أجل تخزين التقارب، وما إلى ذلك)، وبالتالي فإن كفاءة عبور مكرر يجب أن تجتاز أدناه مباشرة أو قريبة تقريبا الحاوية، وأقل قد يكون أعلى من اجتياز المباشر الحاوية الأصلية.

وباختصار، فإن معنى مكرر جود، وليس لمساحة الوقت، ولا وقت للمساحة، ولكن محول (محول). مكرر موجود، حتى نتمكن من استخدام نفس اجتياز مجموعة متنوعة من حاويات للبيان، C ++ أو ما شابه ذلك كما هو مبين في كتلة الخوارزمية، وذلك باستخدام نفس واجهة للتعامل مع جميع أنواع الحاويات.

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

المكررات C ++

3.1 المؤشر التعميم

في C ++، قدم عن طريق مؤشر تعميم مكرر (المعمم المؤشر) أ. ويعرف مماثل functor تعميم المؤشر (من Functor)، الذي يتألف من الحالتين التاليتين:

  • وهو مؤشر حقيقي

  • وهي ليست المؤشر، ولكن بعض شركات المؤشر فوق طاقتها (على سبيل المثال، "*، +، -، ="، الخ.)، وبحيث يعمل بمثابة مؤشر

  • مؤشر تعميم لفي "المقنعة" كمؤشر حقيقي جدا فوق طاقتها مشغل يتم تقسيم عدد التكرارات إلى خمس، كما هو مبين أدناه.

    3.2 C ++ فئة مكرر القياسية

    ينقسم C ++ مكرر من سلوك دعمهم إلى خمس فئات:

  • مكرر الإدخال (الإدخال مكرر): فقط كما rvalue (rvalue)، لا يمكن أن تترك كقيمة (lvalue). ويمكن مقارنة ( "== و! =")

  • الناتج مكرر (الناتج مكرر): فقط كقيمة اليسرى، وليس كقيمة الصحيحة

  • المكررات إلى الأمام (إلى الأمام مكرر): دعم جميع مدخلات المكررات العملية، وخطوة واحدة إلى الأمام عملية (++)

  • مكرر ثنائي الاتجاه (ثنائي الاتجاه مكرر): يدعم جميع العمليات قبل مكرر، وخطوة واحدة العملية العكسية (-)

  • المكررات وصول عشوائي (عشوائية وصول مكرر): مكرر يدعم كل عملية ذات اتجاهين، وكذلك غير المتنقلة في اتجاهين عملية خطوة واحدة

  • لمكرر إلى الأمام، مكرر ثنائي الاتجاه، ومكرر الوصول العشوائي، والذي لم يكن موجودا إذا تم تعريف CONST الأساسي (منخفض المستوى CONST)، وكذلك دعم كل عملية الانتاج مكرر.

    محول 3.3 مكرر

    C ++ تقديم أيضا سلسلة من محول التكرار، بالنسبة لبعض غير مكرر الكائن الذي يتصرف وكأنه مكرر، أو بعض السلوك الافتراضي تعديل مكرر، التي تضم كثيرا من الفئات التالية:

  • إدراج مكرر (إدراج مكرر): الكتابة إلى اليسار بحيث تصبح قيمة مكرر للسفينة إدراج البيانات العملية، من خلال إدراج ويمكن تقسيم مواقع مختلفة في front_insert_iterator، back_insert_iterator وinsert_iterator

  • عكس مكرر (عكس مكرر): مكرر عكس اتجاه الحركة. مثل أن "+" يتحول المشغل إلى اليسار، في حين أن "-" عملية يذهب إلى اليمين (وظيفة المعكوس مثل بايثون)

  • مكرر المحمول (نقل مكرر): قيمة مكرر أن يصبح قيمة مرجعية للحق (Rvalue المرجعي)

  • تيار مكرر (تيار مكرر): سلوك تدفق مكرر محول الكائن (مثل مقابض الملف بايثون)

  • المكررات الثعبان

    بروتوكول 4.1 مكرر

    في بيثون، مكرر بروتوكول القائم مكرر (بروتوكول مكرر) اكتب بطة (بطة نوع). اتفاق مكرر: إذا فئة تريد أن تكون iterable (كائن Iterable)، ثم يجب تنفيذ __iter__ طريقة والاحتياجات قيمة عودتها لتكون كائن طريقة الأدوات __next__.

    ويتحقق سوف تنفذ الطبقة __iter__ طريقة تكرارية يكون الكائن متاح __next__ أسلوب يصبح الدرجة مكرر: وهي.

    من الواضح، __ iter__ طريقة السحر المقابلة لطريقة ايتر وظيفة، __ سحر next__ هي وظيفة القادمة الموافق الطريقة.

    لكائن التكرار، مناقشات بشأن "الذي أدرك __next__ طريقة؟" هذا السؤال لا يمكن أن يتحقق ويمكن تقسيم التكرار الكائن في حالتين:

  • النفس __next__ غير محققة: __iter__ إذا كانت قيمة الإرجاع هو مكرر، في هذا الوقت قد يكون التكرار الذاتي هو كائن. في هذه الحالة، والنفس تكرارية عملية "طلب" لبنية بيانات أخرى. نموذج التعليمات البرمجية كما يلي:

  • الطبقة SampleIterator:

    مواطنه __iter __ (النفس):

    العودة ايتر (...)

  • النفس أدركت __next__: إذا __iter__ إرجاع الأسلوب الذاتي، ثم الذات نفسها مكرر، وهذه المرة الذات نفسها بحاجة إلى مواصلة تحقيق __next__ السبل لتحقيق بروتوكول مكرر كاملة. نموذج التعليمات البرمجية كما يلي:

  • الطبقة SampleIterator:

    مواطنه __iter __ (النفس):

    عودة الذات

    __next مواطنه __ (النفس):

    # ليست النهاية

    إذا ...:

    العودة ...

    # وصول الى نهاية

    آخر:

    رفع StopIteration

    ويمكن رؤية هذا التجسيد أنه عندما يتم إنهاء التكرار، رفع StopIteration تسترشد بيثون مكرر استنفدت.

    باني 4.2

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

    طالما كانت هناك وظيفة من العائد في تعريف الكلمة، هذه الوظيفة لن تكون وظيفة، بأنه "منشئ مولد"، ويسمى المنشئ لإنشاء كائن المولد.

    وهكذا، إذا مناقشة فقط بناء الجملة نفسها، دون النظر إلى حقيقة واقعة: المولد فقط "استعار" بناء الجملة من أجل تعريف وظيفة، في الواقع، يجب عليها أن تفعله مع وظيفة لا شيء (مولد لا يعني أن تنفيذ الأساسي هو أيضا مستقلة عن وظيفة) . نموذج التعليمات البرمجية كما يلي:

    مواطنه SampleGenerator:

    تسفر عن ...

    تسفر عن ...

    تسفر عن ...

    مولد الفهم هو أكثر بسيطة، لمجرد أن comprehensions قائمة بين قوسين قوسين يمكن تغييره إلى:

    (... ل... في ...)

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

    4.3 مكرر غير محدود

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

    المقارنة بين 4.4 و C ++ مكرر

    بعد نوقشت أعلاه يمكن العثور عليها، بيثون فقط مكرر واحد، هذه المكررات أحادي الاتجاه فقط، حصيلة العملية خطوة واحدة، وعدم ترك كقيمة. ولذلك، بيثون مكرر في C ++ مكرر يجب أن تنتمي لقراءة اتجاه واحد فقط، وهو مكرر منخفض جدا.

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

    وخلاصة القول، لتنفيذ المكررات في بيثون هو في الواقع ناقصة للغاية، ينبغي استخدامها بحذر.

    مكرر صحة

    5.1 ما هي صحة مكرر؟

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

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

    5.2 C ++ مكرر صحة

    منذ C ++ لا بيثون القائمة، بنية بيانات صف مزدوج الذيل مثل لتحقيق، لذلك ناقش لفترة وجيزة فقط هنا مكرر ناقلات unordered_map وصلاحية هذه الهياكل البيانات اثنين.

    للناقل، ويرجع ذلك إلى وجود توسع وعملية نقل الذاكرة، بحيث أن أي طريقة يمكن توسيع الذاكرة ستشمل يحتمل أن تسبب ضررا على مكرر push_back، emplace_back، إدراج، زرع شابه.

    A unordered_map الوضع مماثل وناقلات أي من unordered_map إدراج والعملية أيضا إلى تلف مكرر.

    5.3 بيثون مكرر صحة

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

    5.3.1 النهاية إدراج العملية لا تضر يشير إلى قائمة عنصر مكرر الحالي

    نحن التحقيق في التعليمات البرمجية التالية:

    numList =

    numListIter = ايتر (numList)

    بجانب (numListIter)

    لأنني في مجموعة (1000000):

    numList.append (ط)

    # طباعة 2

    طباعة (بجانب (numListIter))

    إذا كان في C ++ لتنفيذ متجه مرات عديدة push_back، ومكرر إلى العنصر الثاني يجب أن فشلت بالفعل. ولكن يمكنك أن ترى في بيثون، مشيرا قائمة مكرر لا تفشل، فإنه لا يزال يعود 2.

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

    5.3.2 النهاية إدراج ويمكن أن يؤدي إلى تلف مكرر قائمة آخر

    numList =

    numListIter = ايتر (numList)

    # 1

    بجانب (numList)

    numList.append (3)

    # 2

    بجانب (numListIter)

    # 3

    طباعة (بجانب (numListIter))

    أولا وقبل كل شيء، بيثون مكرر نهاية هذا المفهوم غير موجود. لكنه يرى من رمز أعلاه، بعد قائمة طول متغير مكرر، وأشار نقطة النهاية مكرر يتغير أيضا، وهي: الذيل الأصلي مكرر لن تطبق.

    ووفقا ل "مكرر فقط تتبع قيمة المؤشر عنصر" هذا الاستنتاج، يمكن أن تفسر هذا السلوك.

    5.3.3 مكرر مرة واحدة المنضب، فإن الضرر يكون دائم

    نحن التحقيق في التعليمات البرمجية التالية:

    numList =

    numListIter = ايتر (numList)

    ل_ في numListIter:

    مرر

    numList.append (3)

    # StopIteration

    طباعة (بجانب (numListIter))

    عندما مكرر للمكرر سيتم تشغيل، في C ++، وهذا من شأنه أن يؤدي في الرأس المساواة ومكرر الذيل، ولكن من الواضح من رمز أعلاه، بيثون مكرر مرة واحدة استنفدت، يمكن لم تعد تستخدم، حتى إذا استمرت الحاوية ل لا يعمل عنصر المضافة.

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

    5.3.4 أي إدراج سوف ديكت عملية تلف مكرر

    نحن التحقيق في التعليمات البرمجية التالية:

    numDict = {1: 2}

    numDictIter = ايتر (numDict)

    numDict = 4

    # RuntimeError

    بجانب (numDictIter)

    عندما نفذت على ديكت إدراج بعد العملية، فإن ديكت الأصلي مكرر تفشل فورا، ورمي RuntimeError. هذا هو السلوك في C ++ هو نفسه، وأكثر أمنا.

    ديكت مجموعة فشل مكرر نفس الطبيعة، لن تناقش مرة أخرى.

    حاشية

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

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

    تنويه: هذه المادة تقديم، ينتمي إلى المؤلف.

    [نهاية]

    هنا أوصي CSDN صديق حسن - برنامج الحياة .

    لماذا أوصى برنامج الحياة؟

    برنامج الحياة جمع مليون المبرمجين، حيث يمكنك تطوير الحكايات نكتة، الحياة Tucao مترو الانفاق من البرنامج.

    ما إذا كان يتم توزيعه من ركلة صناعة الساخنة لتجربة الارتباك من مكان العمل إلى الاتجاهات مخرج، وكذلك المبرمجين الظلام سرا، وسنقدم لكم أحد عشر أعلنت.

    تفكيك خوض الكثير، عناوين مثيرة للاهتمام، وراء الكتاب الأحمر الصغير الجينات الإنترنت شنغهاي

    "TFBOYS" "مشاركة" 190622 لا تأكل الدهون تنتج تباين قوي، TFBOYS مخصصة للجماهير، "جوزيف الرنين"

    2050 مدينة العالم "توقعات الطقس": لندن الصيف متوسط درجة الحرارة من 27 درجة كيف المدن الساخنة يمكن أن تكون في عام 2050

    "TFBOYS" "مشاركة" وانغ يوان 190622 خطوة شجاعة إلى الأمام، وإمكانيات المستقبل حازمة الظهر

    "عائلتي الرجل" تقييمات أول ثلاثية تسع سنوات متتالية لتحقيق تشن دونغ الأسرة الأصلية الرصاص الساخن

    دعونا الصوت الأصلي! قدم ممن لهم رينو صوت مهرجان الموسيقى الأصلية مضاءة تشونغتشينغ ليلة

    هواوي كونغ منغ هو نظام التشغيل للأشياء، الحديث تحلق بايت الضرب المتجر الرفوف، الكتابة JS محرك FFMPEG الكاتب | المهوسون العناوين

    الشائعات شرطة الإنترنت: شبكة نقل أووهاي شارع لسرقة قسم الأطفال الأحداث الصيني الاسود

    1 يوليو شنغهاي القمامة معلما أولا للاستماع إلى معالجة القمامة في اليابان ونوادر

    A تنوعا مؤتمر للمطورين، من المطورين مساعدة بنجاح متقدمة هواوي سحابة

    بكين المفتوحة "واسطة الجمال عالية الوضوح" قصر الصيف السماء الزرقاء صورة،

    التعرف على الوجه المتشددين العلم: رأيت في الحشد في لكم، لا ننسى وجهك من