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

Python 如何自动运行模块中的所有功能?,python,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) 有什么方法可以让我一次运行所有的函数吗?

我需要在一个模块中运行以下几个函数:

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)
有什么方法可以让我一次运行所有的函数吗?我应该把所有的函数都变成一个大函数并运行那个大函数吗


谢谢

如果您只需将这些行存储在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()

您应该在模块中创建一个新函数,该函数执行正在使用的公共序列。这将要求您确定需要哪些输入参数以及返回哪些结果。因此,根据您发布的代码,新函数可能看起来像这样——我只是猜测您可能对最终结果感兴趣。还要注意,我在
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')

据我所知,使用需要函数组合。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()) 

这是另一种方法

您可以编写一个类似于Wikipedia关于函数组合的文章中所示的一般函数。请注意,与本文不同的是,函数是按照调用
compose()
中列出的顺序应用的

下面是一个简单的示例,说明了它的功能:

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())

+1表示<代码>与<代码>,-2表示建议<代码>减少此链接,+1表示善意==0。在这个非常特殊的情况下,像这样的链接稍微简洁一些,但一点都不健壮。+1:我不认为它的健壮性明显低于原始代码。还可能使
funcs
列表也成为
do_all()
的一个参数。@martineau如果我们将
funcs
添加为参数,我们将得到
composition
是一般情况:)@AlexeyKachayev:现在,他已将“风险”一词硬编码到他的
risk_count
函数中。假设他决定把它作为一个参数。请修改您的代码以处理此情况,以便我们可以将其与标准解决方案进行比较;如果没有另一个lambda或partial,我看不出该怎么做。当你在做的时候,不妨添加一个
if
分支。@DSM我提出的解决方案是针对具体的问题,而不是针对所有“未来可能的代码更改”。
my_composition = compose(remove_tables, clean_text_passage, replace,
                         count_words, risk_count)
with open('filing2.txt') as input:
    riskcount = my_composition(input.read())