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

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

【讨论】:

以上是关于在循环内调用函数,但无法返回结果的主要内容,如果未能解决你的问题,请参考以下文章

循环内的异步函数完成后如何调用函数?

递归调用

函数的返回值函数的调用函数的参数

从表单调用php函数,并用结果完成表单

递归函数实例助理解

如何从异步调用返回响应