9

我目前正在构建一个模块化的函数管道来处理 Python (2.7) 中的一些数据。

我坚持松散的功能风格,没有任何对象(对于我正在应用的代码类型和例程,它非常有意义,并且到目前为止的代码整洁易读,设计对象只会让一切变得更加模糊)。

为了保持一致,我定义了一个自定义的命名元组,带有字段名称等。这个想法是初始函数读取一些数据文件并返回这些特殊定义的元组之一。以下函数将读取它,使用数据字段并返回一个带有更改的新元组(因为它们是不可变的)。但是,我似乎无法避免必须执行导入集合并重新定义自定义类型 - 请参阅代码示例。

import collections
def NewFunction(MyCustomType):

    a = ...
    b = ...

    MyCustomType = collections.namedtuple('MyCustomType', 'a, b')
    return MyCustomType(a, b)

它并没有真正引起问题,但我很好奇,好像没有一种更“全局”的方式来做到这一点而没有那么多重复。如果有的话,我做更多“无副作用”的方式不是功能性的吗?(抱歉,这里实际上有两个问题:第一个是实用的封闭式 Python 问题,第二个是更开放/哲学的问题。)

提前致谢!

4

1 回答 1

15

namedtuple()函数基本上是一个类工厂。在模块级别构建该类一次:

import collections

MyCustomType = collections.namedtuple('MyCustomType', 'a, b')

然后MyCustomType到处导入。它只是一个类,您不必每次要构建元组时都重新创建该类。

import somemodule

def NewFunction(param):

    a = ...
    b = ...

    return somemodule.MyCustomType(a, b)
于 2013-07-04T18:32:09.363 回答