我有一个函数,例如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)
完全可以。
我的代码怎么了?
答案 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}