如何自动运行模块中的所有功能?

时间:2012-09-02 16:36:23

标签: python

我需要在模块中运行几个函数,如下所示:

mylist = open('filing2.txt').read()
noTables = remove_tables(mylist)
newPassage = clean_text_passage(noTables)
replacement = replace(newPassage)
ncount = count_words(replacement)
riskcount = risk_count(ncount)

有什么方法可以一次运行所有功能吗?我应该将所有功能都变成一个大功能并运行这个大功能吗?

感谢。

4 个答案:

答案 0 :(得分:2)

您应该在模块中创建一个新函数,该函数执行正在使用的公共序列。这将要求您确定需要哪些输入参数以及返回的结果。因此,考虑到您发布的代码,新函数可能看起来像这样 - 我只是猜测您可能感兴趣的最终结果。还要注意我在with语句中打开文件以确保它阅读后会关闭。

def do_combination(file_name):
    with open(file_name) as input:
        mylist = input.read()
    noTables = remove_tables(mylist)
    newPassage = clean_text_passage(noTables)
    replacement = replace(newPassage)
    ncount = count_words(replacement)
    riskcount = risk_count(ncount)

    return replacement, riskcount

使用示例:

replacement, riskcount = do_combination('filing2.txt')

答案 1 :(得分:1)

如果您只是将这些行存储在Python(.py)文件中,则只需执行它们即可。

或者我在这里遗漏了什么?

创建函数也很容易调用它们:

def main():
    mylist = open('filing2.txt').read()
    noTables = remove_tables(mylist)
    newPassage = clean_text_passage(noTables)
    replacement = replace(newPassage)
    ncount = count_words(replacement)
    riskcount = risk_count(ncount)

main()

答案 2 :(得分:1)

据我所知,使用需要的功能组合。 Python stdlib中没有特殊功能,但您可以使用reduce函数执行此操作:

funcs = [remove_tables, clean_text_passage, replace, count_words, risk_count]
do_all = lambda args: reduce(lambda prev, f: f(prev), funcs, args)

使用

with open('filing2.txt') as f:
    riskcount = do_all(f.read()) 

答案 3 :(得分:0)

这是另一种方法。

您可以编写一个类似于维基百科文章功能组合First-class composition部分所示的一般功能。请注意,与文章不同,这些功能按照compose()调用中列出的顺序应用。

try:
    from functools import reduce  # Python 3 compatibility
except:
    pass

def compose(*funcs, **kwargs):
    """Compose a series of functions (...(f3(f2(f1(*args, **kwargs))))) into
    a single composite function which passes the result of each
    function as the argument to the next, from the first to last
    given.
    """
    return reduce(lambda f, g:
                    lambda *args, **kwargs: f(g(*args, **kwargs)),
                        reversed(funcs))

这是一个简单的例子,说明了它的作用:

f = lambda x: 'f({!r})'.format(x)
g = lambda x: 'g({})'.format(x)
h = lambda x: 'h({})'.format(x)

my_composition = compose(f, g, h)
print my_composition('X')

输出:

h(g(f('X')))

以下是它如何应用于模块中的一系列功能:

my_composition = compose(remove_tables, clean_text_passage, replace,
                         count_words, risk_count)
with open('filing2.txt') as input:
    riskcount = my_composition(input.read())