我有一个简单的函数来读取csv文件并从中提取第一个coloum:
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
单词替换为print
作为print row[0]
并将该函数调用为pass_username()
时,它会打印所有元素。我想将该函数分配给变量,因此我想使用return。如何解决?
test.csv的内容:
"test@gmail.com","rockon"
"hello@gmail.com","hey"
"hithere@gmail.com","ok"
"hellosir@gmail.com","password"
答案 0 :(得分:5)
正如其他回答的人所说,你可以将结果累积到列表中并返回。另一种方法是将return
替换为yield
,这会导致函数返回一个可迭代的类型对象,当你决定稍后迭代它时(可能带有for循环),它会产生你产生的项目
请参阅:What does the "yield" keyword do in Python?
以下是如何在代码中使用它:
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_generator.next()
生成下一个用户名而无需生成所有用户名。
答案 1 :(得分:2)
当你致电return
时,它会退出函数,因此它在到达return
语句后不会处理任何内容。
您可能希望append
将结果列入列表,然后return
列表。
在您的情况下,您甚至可能想要使用list comprehension
,因此请使用以下代码而不是for循环:
return [row[0] for row in spamreader]
答案 2 :(得分:1)
您只能从某个功能返回一次。当它返回时,它就结束了。函数第一次返回时,它结束,因此它只返回一个值。
如果要返回所有值,请将它们累积到列表中并返回列表。