عملکرد کلیدواژه yield در پایتون
در پایتون، کلیدواژه yield
برای ایجاد جنراتورها استفاده میشود که نوعی از ایتراتورها هستند. کلیدواژه yield
به جای برگرداندن یک مقدار و خروج از تابع، تابع را در حالت تعلیق نگه میدارد تا کار بعدی به محض فراخوانی مجدد تابع از همان نقطه ادامه یابد. این ویژگی به شما این امکان را میدهد که ردیفهایی از دادهها را به تدریج و در زمان نیاز تولید کنند، بهجای اینکه تمام دادهها را در حافظه ذخیره کنند.
مفهوم جنراتورها و ایتراتورها
جنراتورها به شما این امکان را میدهند که بهسادگی و بدون اشغال حافظه زیاد، لیستی از مقادیر را تولید کنید. برای هر بار که جنراتور مورد استفاده قرار میگیرد، تنها یک مقدار تولید میشود و سپس تابع در حال تعلیق نگه داشته میشود تا در مرتبه بعدی دوباره فراخوانی شود. این کار زمانی که با مجموعههای بزرگ داده سر و کار داریم، بسیار مفید خواهد بود.
نحوه کارکرد yield
زمانی که در تابعی از yield
استفاده میشود، در واقع یک جنراتور ایجاد میکند. برای مثال در کد زیر:
def countdown(self, n):
while n >= 0:
yield n
n -= 1
هنگامی که countdown
فراخوانی میشود، این تابع یک جنراتور تولید میکند که در هر بار فراخوانی، یک واحد عدد ورودی را کاهش می دهد و باز می گرداند. برای مثال با اجرای کد زیر:
for i in test(5):
print(i)
این خروجی را خواهیم داشت:
5
4
3
2
1
0
مزایای استفاده از yield
استفاده از yield
بسیار بهینهتر از استفاده از لیستهاست، زیرا در صرفهجویی در حافظه و سرعت در بازیابی دادهها کمک میکند. بهعنوان مثال، در حالتی که دادهها بینهایت یا بسیار بزرگ باشند، استفاده از yield
امکان پردازش آنها را بهصورت تدریجی فراهم میآورد بدون اینکه نیاز باشد تا کل لیست در حافظه ذخیره شود.
به طور خلاصه، yield
به ما اجازه میدهد تا با ایجاد جنراتورها، از میزان حافظه بهطور بهینهتری استفاده کنیم و کدهای تمیزتر و مؤثرتری بنویسیم.