3

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

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

4 回答 4

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')
于 2012-09-02T16:51:38.957 回答
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()
于 2012-09-02T16:40:02.380 回答
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()) 
于 2012-09-02T17:01:05.377 回答
0

这是另一种方法。

您可以编写一个类似于Wikipedia 关于Function composition文章的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())
于 2012-09-02T19:24:41.710 回答