آدرس : تهران میدان فردوسی خیابان ایرانشهر بین سمیه و طالقانی مجتمع تجاری میلاد واحد 9

پشتیبانی 24 ساعته : 02188867940 – 09927674217

برای مشاهده لیست علاقه مندی ها وارد شوید!

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

هیچ محصولی در سبد خرید نیست.

ژنراتورها تکرار کننده های ساده شده هستند

دسته بندی :اخبار سایت 11 مارس 2023 علیرضا بابامرادی 207
ژنراتورها تکرار کننده های ساده شده هستند

ژنراتورها تکرار کننده های ساده شده هستند

تکرار کننده کلاس محور این ایده بدی از جانب آموزشی نبود در فصل تکرارکننده‌ها، ما زمان زیادی را صرف نوشتن الف کردیم چشم انداز – اما همچنین نحوه نوشتن یک کلاس تکرار کننده را نشان داد به کد دیگ بخار زیادی نیاز دارد. راستش را بگویم، به عنوان یک “تنبل” و با این حال، تکرار کننده ها در پایتون بسیار مفید هستند. آنها به شما اجازه نوشتن را می دهند حلقه‌های for-in بسیار زیبایی هستند و به شما کمک می‌کنند تا کد خود را پایتونیک‌تر و بیشتر کنید کارآمد. اگر در وهله اول راه راحت تری برای نوشتن این تکرارگرها وجود داشت… تعجب، وجود دارد! یک بار دیگر، پایتون به ما کمک می‌کند تا با مقداری قند نحوی نوشتن تکرارکننده‌ها را آسان‌تر کنیم. در این فصل خواهید دید چگونه با استفاده از ژنراتورها و با کد کمتر تکرارکننده بنویسیم کلمه کلیدی بازده توسعه دهنده، من کارهای خسته کننده و تکراری را دوست ندارم. بیایید با نگاهی دوباره به مثال Repeater که قبلاً انجام دادم شروع کنیم برای معرفی ایده تکرار کننده ها استفاده می شود. این یک کلاس مبتنی بر پیاده سازی تکرارکننده که از طریق یک توالی نامتناهی از مقادیر می چرخد. این چیزی است که کلاس در نسخه دوم (ساده شده) خود به نظر می رسد:class Repeater: ژنراتورهای بی نهایت def __init__(self, value): def __iter__(self): self.value = value return self return self.valueاگر فکر می کنید، “این کد بسیار زیادی برای چنین تکرار کننده ساده ای است” کاملا حق با شما است. بخش‌هایی از این کلاس تقریباً فرمولی به نظر می‌رسند، گویی دقیقاً به همان شیوه از یک کلاس نوشته می‌شوند. تکرار کننده به بعدی def __next__(self):

اینجاست که مولدهای پایتون وارد صحنه می‌شوند

اگر این را بازنویسی کنم کلاس iterator به عنوان یک مولد، به صورت زیر است:while True: def repeater(value): yield valueما فقط از هفت خط کد به سه خط رسیدیم. بد نیست، نه؟ مثل تو می توانید ببینید، ژنراتورها مانند توابع معمولی به نظر می رسند اما به جای استفاده از عبارت return، آنها از yield برای ارسال داده ها به تماس گیرنده استفاده می کنند. آیا این پیاده سازی ژنراتور جدید همچنان به همان روش کار خواهد کرد؟ تکرار کننده کلاس محور ما انجام داد؟ بیایید تست حلقه for-in را برای پیدا کردن بررسی کنیم بیرون:… print(x) >>> for x in repeater(‘Hi’): ‘Hi’ ‘Hi’ ‘Hi’ ‘Hi’ …بله! ما هنوز در حال چرخیدن از طریق سلام هایمان برای همیشه هستیم. به این اندازه به نظر می‌رسد اجرای کوتاه‌تر ژنراتور به همین روش عمل می‌کند که کلاس Repeater انجام داد. (به یاد داشته باشید در صورت تمایل Ctrl+C را بزنید خارج از حلقه بی نهایت در یک جلسه مترجم.) ‘Hi’ حال، این ژنراتورها چگونه کار می کنند؟ آنها شبیه عملکردهای عادی هستند، اما رفتار آنها کاملا متفاوت است. برای شروع، با یک ژنراتور تماس بگیرید یک شی مولد:>>> repeater(‘Hey’) تابع حتی تابع را اجرا نمی کند. صرفا ایجاد می کند و برمی گردد <generator object repeater at 0x107bcdbf8> کد موجود در تابع مولد فقط زمانی اجرا می شود که () next باشد بر روی شی مولد فراخوانی شد:>>> next(generator_obj) >>> generator_obj = repeater(‘Hey’) ‘Hey’کلمه کلیدی yield در آنجا به نوعی این عملکرد مولد را در اواسط اجرا متوقف می کند و سپس آن را در زمان بعدی از سر می گیرد:اگر دوباره کد تابع تکرار کننده را بخوانید، به نظر می رسد

علیرضا بابامرادی

راه آسان‌تری برای ارتباط با کاربران‌مان پیدا کرده‌ایم :) عضویت در کانال

مطالب زیر را حتما بخوانید:

قوانین ارسال دیدگاه در سایت

  • چنانچه دیدگاهی توهین آمیز باشد تایید نخواهد شد.
  • چنانچه دیدگاه شما جنبه ی تبلیغاتی داشته باشد تایید نخواهد شد.
  • چنانچه از لینک سایر وبسایت ها و یا وبسایت خود در دیدگاه استفاده کرده باشید تایید نخواهد شد.
  • چنانچه در دیدگاه خود از شماره تماس، ایمیل و آیدی تلگرام استفاده کرده باشید تایید نخواهد شد.
  • چنانچه دیدگاهی بی ارتباط با موضوع آموزش مطرح شود تایید نخواهد شد.

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

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

لینک کوتاه:
0