我应该在我的功能中改变什么

Eli*_*eph 1 python python-2.7 pandas

list_1  =[1, 2, 3, 4 ]

def fun(list_1):
    for each value in list1:
        # perform some operation and create a new data frame(pandas) for each value in the list
        # so in total I should get 4 data frames.
        print each_value

        return new_data_frame
Run Code Online (Sandbox Code Playgroud)

当我运行时,fun(list_1)我应该得到4个数据帧:

1
data_frame_1

2
data_frame_2

3
data_frame_3

4
data_frame_4
Run Code Online (Sandbox Code Playgroud)

但我只获得了第一个值的输出.

1
data_frame_1
Run Code Online (Sandbox Code Playgroud)

那我该怎么改变我的功能呢.

d6b*_*els 5

当你return从这个功能,它结束了.
你不在功能之中就是这样.

您可以使用发电机来达到您想要的效果,或者您可以返回a tuple或a list.


使用发电机:

def fun(list_1):
    for each_value in list_1:
        # perform some operation and create a new data frame(pandas) named "new_data_frame" for each value in the list
        print each_value
        yield new_data_frame

for data_frame in fun(list_1):
    # Do something with the data frame "data_frame"
Run Code Online (Sandbox Code Playgroud)

这将每次打印该值,并返回您的数据框.但是它返回一个生成器,所以你必须多次调用该函数.你不能真正做的是将数据帧放在循环中,而不想将它们存储在列表中或同化或只调用一次函数.


列表的简单方法可以是:

def fun(list_1):
    data_frames = []
    for each_value in list1:
        # perform some operation and create a new data frame(pandas) named "new_data_frame" for each value in the list
        print each_value
        data_frames.append(new_data_frame)

return data_frames
Run Code Online (Sandbox Code Playgroud)

作为参考,我建议你看一下"yield"关键字在Python中的作用是什么? 这可能对你有意思.