【问题标题】: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)

完全没问题。

我的代码有什么问题?

【问题讨论】:

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


    【解决方案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}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-01
        • 2019-09-30
        • 2011-08-18
        • 1970-01-01
        • 2017-12-29
        • 1970-01-01
        相关资源
        最近更新 更多