Return 循环中的多个列表值
Return Multiple List Values in Loop
这是我使用的代码:
import csv
my_list = ['a', 'b','c','d']
def listIterations(inputcsv):
for i in inputcsv:
x = str(i)
return x
print(listIterations(my_list))
这是输出:a
这是所需的输出:
a
b
c
d
我希望它遍历列表并分别输出每个元素。
最终我将使用此函数将列表提供给另一个函数。
请记住,return x
的意思是“结束函数,并传递值 'x'”,因此 return x
行在循环的第一次迭代中结束您的函数,并传递任何值'x' 是。这就是为什么您只得到 a
,列表中的第一项。
一般来说你说的是Generator。使用生成器,您可以通过这段代码实现这一点:
def listIterations(inputcsv):
for i in inputcsv:
yield str(i)
或更短:
def listIterations(inputcsv):
yield from inputcsv
有关更详细的答案,请参阅 this question
然而,在您描述的特定情况下,也可以通过功能结构来实现。
map(lambda x: print(x), my_list)
通常 map 用于将一个 iterable 中的值替换为根据输入值计算的其他值,但如果您只是将所有值映射到 None
并作为副作用打印它们。但是请注意,这被认为是在函数运算符(如 map)中引起副作用的不良做法,它与函数式编程的基本概念非常矛盾(感谢 @C.Nivs 指出这一点)。
将 return
替换为 yield
以将您的函数转换为生成器函数。当您调用它时,它 returns 一个生成器对象,您可以在空闲时对其进行迭代以一次生成您想要的结果:
def listIterations(inputcsv):
for i in inputcsv:
yield str(i)
>>> listIterations(my_list)
<generator object listIterations at 0x00000237062CC350>
您将只能使用此对象一次。由于您的输入是一个列表,您总是可以多次调用 listIterations
来获得一个新的生成器。要打印,请对生成器执行 star-expand:
print(*listIterations(my_list), sep='\n')
将生成器扩展到参数列表中会 运行 它,并将每个元素传递给 print
。如果你想永久记录生成的值,将它们展开成一个列表:
generated_values = list(listIterations(my_list))
或一个元组:
generated_values = tuple(*listIterations(my_list))
您可以用同样的方式打印隐藏值:
print(*generated_values, sep='\n')
综上所述,如果您只需要一个列表迭代器,您可以使用内置 iter
:
获得一个
iter(my_list)
这等同于(对于列表):
def listIterations(somelist):
yield from somelist
listIterations(my_list)
这是我使用的代码:
import csv
my_list = ['a', 'b','c','d']
def listIterations(inputcsv):
for i in inputcsv:
x = str(i)
return x
print(listIterations(my_list))
这是输出:a
这是所需的输出:
a
b
c
d
我希望它遍历列表并分别输出每个元素。
最终我将使用此函数将列表提供给另一个函数。
请记住,return x
的意思是“结束函数,并传递值 'x'”,因此 return x
行在循环的第一次迭代中结束您的函数,并传递任何值'x' 是。这就是为什么您只得到 a
,列表中的第一项。
一般来说你说的是Generator。使用生成器,您可以通过这段代码实现这一点:
def listIterations(inputcsv):
for i in inputcsv:
yield str(i)
或更短:
def listIterations(inputcsv):
yield from inputcsv
有关更详细的答案,请参阅 this question
然而,在您描述的特定情况下,也可以通过功能结构来实现。
map(lambda x: print(x), my_list)
通常 map 用于将一个 iterable 中的值替换为根据输入值计算的其他值,但如果您只是将所有值映射到 None
并作为副作用打印它们。但是请注意,这被认为是在函数运算符(如 map)中引起副作用的不良做法,它与函数式编程的基本概念非常矛盾(感谢 @C.Nivs 指出这一点)。
将 return
替换为 yield
以将您的函数转换为生成器函数。当您调用它时,它 returns 一个生成器对象,您可以在空闲时对其进行迭代以一次生成您想要的结果:
def listIterations(inputcsv):
for i in inputcsv:
yield str(i)
>>> listIterations(my_list)
<generator object listIterations at 0x00000237062CC350>
您将只能使用此对象一次。由于您的输入是一个列表,您总是可以多次调用 listIterations
来获得一个新的生成器。要打印,请对生成器执行 star-expand:
print(*listIterations(my_list), sep='\n')
将生成器扩展到参数列表中会 运行 它,并将每个元素传递给 print
。如果你想永久记录生成的值,将它们展开成一个列表:
generated_values = list(listIterations(my_list))
或一个元组:
generated_values = tuple(*listIterations(my_list))
您可以用同样的方式打印隐藏值:
print(*generated_values, sep='\n')
综上所述,如果您只需要一个列表迭代器,您可以使用内置 iter
:
iter(my_list)
这等同于(对于列表):
def listIterations(somelist):
yield from somelist
listIterations(my_list)