Python 无法将屈服值传递给另一个函数
我有两个功能:Python 无法将屈服值传递给另一个函数,python,function,generator,Python,Function,Generator,我有两个功能: def getItems(r, c): **do something** **find and yield four values a, b, c, d** yield (a,b,c,d) def mainfunction(data): reader = csv.reader(records) for row in reader: a,b,c,d = getItems(row, c) yield (
def getItems(r, c):
**do something**
**find and yield four values a, b, c, d**
yield (a,b,c,d)
def mainfunction(data):
reader = csv.reader(records)
for row in reader:
a,b,c,d = getItems(row, c)
yield (a,b,c,d)
但是,当我运行该文件时,我不断收到一个错误:
a, b, c, d = getItems(r, c)
ValueError: not enough values to unpack (expected 5, got 1)
我不知道该怎么做
yield
将函数转换为生成器,每个yield
都是迭代器的一项。元组是另一项。因此,您的getItem
返回一个元组的iterable(~序列),即使它只生成一个元组,它仍然是元组的迭代器
只需将yield
替换为return
。或者,如果有它出现的实际原因,则需要迭代getItem
的结果
您还可以生成单独的值,例如
getItem()
是由4个元素组成的iterable,但这似乎不是很有用。yield
将函数转换为生成器,每个yield
都是迭代器的一项。元组是另一项。因此,您的getItem
返回一个元组的iterable(~序列),即使它只生成一个元组,它仍然是元组的迭代器
只需将yield
替换为return
。或者,如果有它出现的实际原因,则需要迭代getItem
的结果
您还可以生成单独的值,例如
getItem()
是一个由4个元素组成的iterable,但这似乎不是很有用。我应该只使用yield,您建议我如何迭代yield?那。。。没有任何意义。但是您可以在getItem()中为a、b、c、d,也可以用产生a、b、c、d替换产生a、b、c、d;产量b;产量c;产量d
。这两种方法看起来都很愚蠢。使用第一种方法,我得到了一个新的错误:yield(a,b,c,d)UnboundLocalError:赋值前引用的局部变量“c”我应该只使用yield,你建议我如何迭代yield?那。。。没有任何意义。但是您可以在getItem()中为a、b、c、d,也可以用产生a、b、c、d替换产生a、b、c、d;产量b;产量c;产量d
。这两种方法看起来都很愚蠢。使用第一种方法,我得到了一个新的错误:yield(a,b,c,d)UnboundLocalError:赋值前引用的局部变量“c”r
和c
的值是从哪里传来的?是的,很抱歉r应该是行,c是一个字典,我通过它来获取每行中的匹配项。我已经编辑过。您试图传递给getItems
的r
和c
值来自哪里?是的,很抱歉,r应该是行,而c是我传递的字典,用于获取每行中的匹配项。我编辑过。