在循环内调用函数,但无法返回结果

时间:2018-07-10 09:54:54

标签: python python-3.x pandas dictionary for-loop

我有一个函数,例如func(var),它根据我输入的变量返回3个数据帧。

例如,如果我写

df_a,df_b,df_c = func(7)

我将获得三个数据帧。

但是,如果我在for循环中调用该函数,则无法获取结果。

例如,

for i in range(1,4):
    df_a_i, df_b_i, df_c_i = func(i)

我无法找回df_a_1或其他任何内容。我收到错误消息

NameError: name 'df_a_1' is not defined

如果我尝试手动调用它,那就是

df_a_1, df_b_1, df_c_1 = func(1)
df_a_2, df_b_2, df_c_2 = func(2)
df_a_3, df_b_3, df_c_3 = func(3)
df_a_4, df_b_4, df_c_4 = func(4)

完全可以。

我的代码怎么了?

3 个答案:

答案 0 :(得分:0)

如果您从func()返回三个参数,则它必须起作用:

def func(a):
    return a + 1, a + 2, a + 3

d = {}

for i in range(1, 4):
    df_a_i, df_b_i, df_c_i = func(i)
    d['df_a_%i' % i] = df_a_i
    d['df_b_%i' % i] = df_b_i
    d['df_c_%i' % i] = df_c_i

print(d['df_a_1'])

答案 1 :(得分:0)

您可以使用一个额外的数组来实现。

df_s = []
for i in range(1,4):
    df_a, df_b, df_c = func(i)
    df_s.append([df_a, df_b, df_c])

# get the ith df
df_s[i]

答案 2 :(得分:0)

为可变数量的变量使用字典。不要尝试动态命名变量。这通常会导致代码难以管理。在这里,您可以使用嵌套字典。

def func(i):
    return i, i+1, i+2

d = {i: {} for i in 'abc'}

for i in range(1, 4):
    d['a'][i], d['b'][i], d['c'][i] = func(i)

print(d)

{'a': {1: 1, 2: 2, 3: 3},
 'b': {1: 2, 2: 3, 3: 4},
 'c': {1: 3, 2: 4, 3: 5}}

如果愿意,可以使用元组键:

def func(i):
    return i, i+1, i+2

d = {}

for i in range(1, 4):
    d[('a', i)], d[('b', i)], d[('c', i)] = func(i)

print(d)

{('a', 1): 1, ('b', 1): 2, ('c', 1): 3,
 ('a', 2): 2, ('b', 2): 3, ('c', 2): 4,
 ('a', 3): 3, ('b', 3): 4, ('c', 3): 5}