دستور yield پایتون چیست ؟
28 اردیبهشت 1402
ارسال شده توسط AlirezaMirhabibi
دستور yield پایتون چیست ؟
دستور yield در پایتون دقیقاً مانند دستور return است – هر آنچه را که به آن بگویید (به عنوان یک Generator) برمی گرداند. با این تفاوت که دفعه بعد که ژنراتور را فراخوانی می کنید، اجرا از آخرین فراخوانی yield شروع می شود. برخلاف return،
قالب stack در هنگام اجرای yield در پایتون پاک نمیشود، با این حال کنترل به call کننده بازگردانده میشود، بنابراین دفعه بعد که تابع فراخوانی شود، وضعیت آن از سر گرفته نمیشود.
در مورد مثال زیر، تابع get_child_candidates مانند یک تکرار کننده عمل می کند به طوری که وقتی لیست خود را گسترش می دهد، هر بار یک عنصر را به لیست جدید اضافه می کند. list.extend یک تکرار کننده را تا زمانی که تمام شود فراخوانی می کند. در مورد نمونه کد زیر، واضح است که فقط یک تاپل را برمی گرداند و آن را به لیست اضافه می کند.
def _get_child_candidates(self, distance, min_dist, max_dist):
if self._leftchild and distance - max_dist < self._median:
yield self._leftchild
if self._rightchild and distance + max_dist >= self._median:
yield self._rightchild
و فراخوانی کننده تابع فوق
result, candidates = [], [self]
while candidates:
node = candidates.pop()
distance = node._get_dist(obj)
if distance <= max_dist and distance >= min_dist:
result.extend(node._values)
candidates.extend(node._get_child_candidates(distance, min_dist, max_dist))
return result
دیدگاهتان را بنویسید