在循环内调用函数,但无法返回结果
Posted
技术标签:
【中文标题】在循环内调用函数,但无法返回结果【英文标题】:Call a function inside a loop, but cannot return the results 【发布时间】:2018-12-18 02:56:00 【问题描述】:我有一个函数,比如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)
完全没问题。
我的代码有什么问题?
【问题讨论】:
【参考方案1】:如果你从 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'])
【讨论】:
但是如何在循环外得到结果,比如如何在for循环外取回df_a_1? def func(a): return a + 1, a + 2, a + 3 d = for i in range(5): 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'])【参考方案2】:您可以使用额外的数组来实现这一点。
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]
【讨论】:
【参考方案3】:对可变数量的变量使用字典。不要尝试动态命名变量。这通常会导致无法管理的代码。在这里您可以使用嵌套字典。
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
【讨论】:
以上是关于在循环内调用函数,但无法返回结果的主要内容,如果未能解决你的问题,请参考以下文章