收益率与用于isli时的收益率

2024-09-30 04:31:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个关于收益和收益之间的差异的问题,特别是当它们与islice结合使用时。这是我的密码:

def get_table_row():
  iter_veh = get_data(fp_vehicle, vehicles_cols, Vehicles)
  iter_per = get_data(fp_personal, personals_cols, Personals)
  iter_emp = get_data(fp_employment, employments_cols, Employments)
  iter_upd = get_data(fp_update, updates_cols, Updates)
  yield from ((*v, *p, *e, *u) for v, p, e, u in zip(iter_veh, iter_per, iter_emp, iter_upd))

from itertools import islice
for row in islice(get_table_row(), 5):
  print(*row)

这将从表中正确打印出5行记录。你知道吗

但是,如果我使用以下代码:

def get_table_row():
  iter_veh = get_data(fp_vehicle, vehicles_cols, Vehicles)
  iter_per = get_data(fp_personal, personals_cols, Personals)
  iter_emp = get_data(fp_employment, employments_cols, Employments)
  iter_upd = get_data(fp_update, updates_cols, Updates)
  yield ((*v, *p, *e, *u) for v, p, e, u in zip(iter_veh, iter_per, iter_emp, iter_upd))

from itertools import islice
for row in islice(get_table_row(), 5):
  print(*row)

这将导致打印出所有行。这里唯一的区别是收益率与收益率。我需要一个解释。谢谢!你知道吗


Tags: infromfordatagettablerowcols
2条回答

yield from语句(大大简化)将yield给定迭代器中的每个项。而yield语句将yield一个值。你知道吗

对于这个特定的用例,您可以用以下代码行替换yield from

for value in generator:
    yield value

这里有一些关于yield from可以做什么的更多信息:In practice, what are the main uses for the new "yield from" syntax in Python 3.3?

一个空的yield提供了它的参数。一个yield from从它的参数提供元素。你知道吗

yield (1, 2, 3) # provide entire tuple at once
yield from (1, 2, 3) # provide elements from the tuple 

您可以将yield from看作是yield加上迭代:

yield from (1, 2, 3)
# iteration style 
for element in (1, 2, 3):
    yield element

注意,yield from做的不仅仅是迭代:它在参数和调用范围之间架起了桥梁。像generator.close()这样的信号是自动传递的,而不需要手动传播。你知道吗

相关问题 更多 >

    热门问题