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是我传递的字典,用于获取每行中的匹配项。我编辑过。