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

هدف این صفحه نشان دادن پویایی 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. مثال واقعی – واحد تست ورودی های خط فرمان چندگانه
- تعریف/دریافت یک شیء تکرارپذیر مانند یک لیست
["20.01", "y"]
- ارسال یک شی تکرار شونده به
iter()
→ یک شی تکرار کننده ایجاد کنید - ارسال یک شی تکرار کننده به a
next()
تا در هر بار مقدار بعدی لیست به دست آیدinput
تابع در کد فراخوانی می شود
def test_pubDoc(monkeypatch):
inputs = iter(["20.01", "y"])
monkeypatch.setattr("builtins.input", lambda _: next(inputs))
#...
- اولین بار
input()
مواجه می شود،"20.01"
ارزش پاس شده است، - بار دوم است
"y"
- بار سوم یک استثنا خواهد بود
6. پیوندها