برنامه نویسی

توضیح Iterable در مقابل Iterator در پایتون

هدف این صفحه نشان دادن پویایی 2 پروتکل تکرار است:

  1. قابل تکرار
  2. تکرار کننده

1. اما ابتدا (برای افزودن به کلمات مشابه گیج کننده)، اجازه دهید به تکرار اشاره کنیم

  • تکرار – البته – گرفتن آیتم ها یکی یکی از یک منبع و انجام کاری با هر کدام به نوبه خود است
  • در پایتون، این معمولا در استفاده می شود
    • الف) حلقه‌های for/while و
    • ب) درک
  • به طور پیش فرض – این ساختارها در کل ساختار تکرار شود
  • با این حال، گاهی اوقات ممکن است به کنترل دقیق تری نیاز باشد – مانند در ژنراتورها
  • برای این کار، 2 مفهوم/پروتکل مهم وجود دارد که در بالای آنها بیشتر پایتون ساخته شده است:
  • الف) اشیاء قابل تکرار
  • ب) اشیاء تکرار شونده
  • هر دو در پروتکل های پایتون استاندارد منعکس شده اند
  • این چیز اضافی نیست: در واقع، حلقه‌های for/whil و درک مستقیماً بر روی این عناصر سطح پایین پروتکل‌های تکرار ساخته می‌شوند.

2. روش ITER() یک ITERATOR از یک ITERable ایجاد می کند

  • شیء قابل تکرار (مجموعه یا جریان اشیاء) هر شیئی است که بتوان آن را به داخل داخلی منتقل کرد iter() تابع
  • یک بار از داخلی عبور کرد iter() تابع و که یک را برمی گرداند شی تکرار کننده از نوع پاس شده، یعنی یک تکرار کننده رشته با ایجاد می شود
>>> example_iterator = iter('abc')
>>> example_iterator

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  • توجه داشته باشید که تکرار کننده یک شی دنباله ضمنی است که ارائه می کند متوالی (نه تصادفی!) دسترسی به مجموعه داده های متوالی زیربنایی
  • برای مثال range شی خود یک تکرار کننده نیست
  • تکرار کننده اجازه دسترسی به عنصر دلخواه سری زیربنایی را نمی دهد
  • آنها فقط دسترسی به بعدی عنصر سریال
  • آنها فراهم می کنند دسترسی متوالی

>>> r = range(10)[5]
>>> r
5
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

3. تابع ()NEXT مقدار بعدی را از یک ITERATOR برمی گرداند

  • ساخته شده در next() نیاز به یک تکرار کننده شی – و مقدار بعدی را در تکرار یک مجموعه برمی گرداند
  • تکرار کننده از 2 جزء تشکیل شده است:
  • مکانیزم برای بازیابی بعدی عنصر یک مجموعه
  • مکانیزم برای سیگنال دادن پایان از سری

در زبان های برنامه نویسی با سیستم های شی داخلی، این انتزاع معمولاً با یک رابط خاص مطابقت دارد که می تواند توسط کلاس ها پیاده سازی شود.

  • next() اجازه می دهد تا هر مورد را به نوبه خود در نظر بگیرید / در صورت درخواست – نه کل سری از ابتدا تا انتها
  • 2 پیام رابط تکرار کننده شامل وجود دارد
    • بعدی → پرس و جو برای عنصر بعدی
    • تکرار کنید → تکرار کننده را برگردانید
  • محدودیت: تکرار کننده را می توان یک بار تکرار کرد

4. مثال کلاس درس – از ITERABLE به ITERATOR تا STOPITERATION EXCEPTION

  • پایتون، آزادانه، یک را بالا می برد استثنا از نوع StopIteration
iterable = ['Spring', 'Summer', 'Autumn', 'Winter']
iterator = iter(iterable)
next(iterator)
# >>> 'Spring'
next(iterator)
# >>> 'Summer'a  r
next(iterator)
# >>> 'Autumn'
next(iterator)
# >>> 'Winter'
next(iterator)
# >>> Traceback (most recent call last):
# >>> File "", line 1, in 
# StopIteration
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

5. مثال واقعی – واحد تست ورودی های خط فرمان چندگانه

  1. تعریف/دریافت یک شیء تکرارپذیر مانند یک لیست ["20.01", "y"]
  2. ارسال یک شی تکرار شونده به iter() → یک شی تکرار کننده ایجاد کنید
  3. ارسال یک شی تکرار کننده به a next() تا در هر بار مقدار بعدی لیست به دست آید input تابع در کد فراخوانی می شود
def test_pubDoc(monkeypatch):
    inputs = iter(["20.01", "y"])
    monkeypatch.setattr("builtins.input", lambda _: next(inputs))
    #...
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  • اولین بار input() مواجه می شود، "20.01" ارزش پاس شده است،
  • بار دوم است "y"
  • بار سوم یک استثنا خواهد بود

6. پیوندها

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا