Python ';返回';关键字从循环中只返回一个元素?

Python ';返回';关键字从循环中只返回一个元素?,python,return,Python,Return,我有一个简单的函数来读取csv文件并从中提取第一个冒号: import csv def pass_username(): with open('test.csv', 'r') as csvfile: spamreader = csv.reader(csvfile, delimiter=',') for row in spamreader: return row[0] 当我将此函数调用为: a = pass_username()

我有一个简单的函数来读取csv文件并从中提取第一个冒号:

import csv 

def pass_username():
    with open('test.csv', 'r') as csvfile:
        spamreader = csv.reader(csvfile, delimiter=',')
        for row in spamreader:
            return row[0]
当我将此函数调用为:

a = pass_username()
print a 
这只打印第一个元素。但是,当我将
return
word替换为
print
as
print row[0]
并将函数调用为
pass\u username()
时,它将打印所有元素。我想把这个函数赋给一个变量,因此我想使用return。如何修复它

test.csv的内容:

"test@gmail.com","rockon"
"hello@gmail.com","hey"
"hithere@gmail.com","ok"
"hellosir@gmail.com","password"

一个函数只能返回一次。当它回来的时候,一切都结束了。函数第一次返回时即结束,因此只返回一个值


如果要返回所有值,请将它们累加到一个列表中并返回该列表。

当调用
return
时,它自动退出函数,因此在到达
return
语句后,它不会处理任何内容

您可能希望
将结果附加到列表中,然后
返回列表

在您的情况下,您甚至可能希望使用
列表理解
,因此,不要使用for循环,而是使用以下内容:

return [row[0] for row in spamreader]

正如其他回答的人所说,您可以将结果累积到一个列表中并返回该列表。另一种方法是将
return
替换为
yield
,这会导致函数返回一个iterable类型的对象,当您决定稍后对其进行迭代时(可能使用for循环),该对象会生成您所生成的项

见:

以下是您将如何在代码中使用它:

import csv 

def pass_username():
    with open('test.csv', 'r') as csvfile:
        spamreader = csv.reader(csvfile, delimiter=',')
        for row in spamreader:
            yield row[0]

username_generator = pass_username()

# iterate through the usernames with a for loop
for name in username_generator:
    print name
# call the list constructor which causes it to produce all of the names
print list(pass_username())

请记住,用户名是根据需要生成的,因此您可以,例如,执行
username\u generator.next()
,它将生成下一个用户名,而不必生成所有用户名。

',还有人写了完全相同的东西,在你面前提交了他的答案。虽然iterable类型并不真正“包含”项目,因为它们是按需生成的,而不是实际存储的。是的,如果不提出延迟评估之类的方法,很难准确地解释它是如何工作的。我将编辑我的答案以更好地反映这一点。可能需要添加一段示例代码——使用is生成器比理解它们容易得多:)它返回generator对象。我怎样才能产生所有的元素?谢谢!谢谢!:)