【问题标题】:How does this work?这是如何运作的?
【发布时间】:2010-11-30 20:58:28
【问题描述】:

所以我试图理解 matplotlib.mlab 中 csv2rec 的源文件。它用于获取 csv 文件并将数据解析为特定格式。所以它可能需要一个字符串'234'并将其转换为int。或取一个日期字符串并将其转换为 python 日期时间。

def get_converters(reader):

    converters = None
    for i, row in enumerate(reader):
        if i==0:
            converters = [mybool]*len(row)
        if checkrows and i>checkrows:
            break
        #print i, len(names), len(row)
        #print 'converters', zip(converters, row)
        for j, (name, item) in enumerate(zip(names, row)):
            func = converterd.get(j)
            if func is None:
                func = converterd.get(name)
            if func is None:
                #if not item.strip(): continue
                func = converters[j]
                if len(item.strip()):
                    func = get_func(name, item, func)
            else:
                # how should we handle custom converters and defaults?
                func = with_default_value(func, None)
            converters[j] = func
    return converters

我对这个功能的问题是“转换器”。它从无开始。然后稍后 'func = converters[j]' j 我知道是一个刚刚通过枚举创建的数字。因此它正在寻找由 j 索引的相应转换器项。但是转换器中什么都没有,因为它是 None 对吗?除非python程序不必从上到下阅读?在这种情况下,我们从接下来的两行“if len(item.st....etc)”或“else:”部分获取 func。但是,我只是假设它必须从上到下阅读。

我不知道其他任何事情是否重要,所以我只包含了整个函数。 convertd 是一个字典映射,我相信用户可以提供作为参数来自动查找转换器。 checkrows 只是用户在开始时作为参数提供的一个数字,用于检查有效性。默认为无。我还是一个初学者,所以仅供参考。 =)

谢谢大家。这个网站很有帮助!

【问题讨论】:

    标签: python function matplotlib


    【解决方案1】:

    转换器在循环开始时再次设置

    if i==0:
      converters = [mybool]*len(row)
    

    所以在那之后它就不再是 None 了。

    【讨论】:

      【解决方案2】:

      除非我遗漏了什么,否则在第一次迭代中“i”为 0,因此执行以下操作:

      converters = [mybool]*len(row)
      

      并初始化“转换器”

      【讨论】:

        【解决方案3】:

        首先,

        converters = None
        

        converters 设置一个初始值。这样,如果没有发生迭代(因为 readers 可能为空),那么当函数返回 converters 时,它将存在并具有值 None

        如果发生了对readers 的迭代,那么converters 在第一次通过迭代时会立即重置为更有意义的值(当i==0 时):

        converters = [mybool]*len(row)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-06-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-11-11
          • 1970-01-01
          • 2015-10-23
          • 2011-01-05
          相关资源
          最近更新 更多