问题:如何组织依赖许多外部数据工作的大功能。我应该声明一个类并包含那些外部数据吗?或者我应该将大功能及其数据保存在一个文件中?或者有更好的方法可以做到这一点?计算效率最高的方法是什么?什么是最pythonic,推荐的方式?
我有一个要解析的日志文件,日志文件包含许多格式的字符串。我写了一个parseLine(inputStr)函数来处理所有可能的格式。 parseLine()函数需要许多预编译的正则表达式,以及一个非常大的字典用于查找。我将parseLine()函数保存在文件parseLineFile.py
中我的parseLineFile.py看起来像:
regex0 = re.compile('foo')
regex1 = re.compile('bar')
# and many more regexes
set0 = {'f', '0'}
set1 = {'b', 'a'} # could be a big set contains 10s of strings
# and many more sets
def parseLine(inputString, inputDictionary, inputTimeCriteria):
# pseduo code:
# use regex0 to extract date info in inputString
# check if date within inputTimeCriteria
# use more of previous declared regexes and sets to extract more info,
# branch out to different routines to use more regexes and sets to extract more info
# finally use inputDictionary to look up the meaning of extracted info
# return results in some data structure
在我的主代码中,我导入了parseLineFile.py
构建myDictionary,决定mytimeCriteria,然后使用parseLine()逐行解析文件。
我觉得我的问题是......不是堆栈溢出,但是如果你要发表一个关于我应该如何问一个较窄/特定问题的评论,这太棒了!但请至少提一下如何处理我的问题。
答案 0 :(得分:0)
很难具体告诉你应该为这个特定功能做些什么,但是有关组织大功能的一些提示:
首先,确定哪些条件可以移动到自己的函数中。例如,假设您有此代码:
if 'foo' in inputString:
line = regex()
line = do_something_else()
elif 'bar' in inputString
line = regex()
line = do_something_a_little_different()
你可以很容易地看到你可以在这里做的一个抽象,那就是将每个if
块中的功能移动到它自己的函数中,这样你就可以创建parseFoo
和parseBar
函数了拿一条线,然后返回一个预期值。
这样做的主要好处是,现在您可以使用极其简单的单元测试功能!
我要注意的其他事项是:
return
,以减少嵌套无论如何,你的更多意见是理想的,但我希望这有助于你的开始!