我在python中有以下功能:
def extractParam(word, varName, stringToReplace):
if word.startswith(stringToReplace):
varName=int (word.replace(stringToReplace, ''))
return varName
def getMParams(line):
l = r = b = t = 0
sline = line.strip().split()
for i in range(len(sline)):
l = extractParam(sline[i], l, "l=")
r = extractParam(sline[i], r, "r=")
b = extractParam(sline[i], b, "b=")
t = extractParam(sline[i], t, "t=")
return l, r, b, t
def getIterParams (line):
width = height = stride = x = y = 0
sline = line.strip().split()
for i in range(len(sline)):
width = extractParam(sline[i], width, "width=")
height = extractParam(sline[i], height,"height=")
stride = extractParam(sline[i], stride,"stride=")
x = extractParam(sline[i], x, "x=")
y = extractParam(sline[i], y, "y=")
return width, height , stride, x, y
函数getMparams和getIterParams是完全相同的,我的问题是如果有一种方法可以创建一个替换它们的函数,我正在考虑这样的事情:
def func (line, params)
//params is an array of parameters (i.e [l,r,b,t] or [width,height,stride,x,y])
//init all params
sline = line.strip().split()
for i in range(len(sline)):
//for everyParam:
param = extractParam(sline[i],param,"param=")
有可能吗?还是有另一种方法可以做到这一点?
答案 0 :(得分:1)
首先,一些风格点:
您在varName
中处理extractParam
的方式既丑陋又令人困惑。我花了一些时间来弄清楚你想要做什么(即,允许extractParam
可能找不到任何数据这一事实。现在,可以直接处理,而不是尝试调用函数。
您正在做的range(len(
件has to stop。
在strip
之前,您不需要split
行 - 任何前导和尾随空格在分割操作期间都会消失。你不会在结果中得到任何额外的空字符串。
名称sline
简直太丑了。你已将line
分成单词;为什么不把这些词称为words
? (无论如何,不要使用缩写和混乱的东西。否则你会得到sline
之类的东西,而不是真正的单词。)
我们不会将namesLikeThis
用于函数(或其他任何内容;尽管我们在Python中使用NamesLikeThis
,并使用起始大写字母表示类)。我们使用names_like_this
。
此外,您似乎反复尝试替换
那就是说,你提议的方法很好。请注意,由于我们事先并不知道将提取多少项,因此我们不能只将每个项目分成一个单独的变量。但我们可以通过返回dict
来轻松解决此问题。
我的方法如下:我迭代names
,并且每次尝试在line
中找到相应的单词。找到一个后,我替换0的默认value
,完成此检查后,我将相应的键值对插入到返回的result
中。我也采取了一种更简单的方法来切割等号周围的单词。
def extract_params(line, names):
words = line.split()
result = {}
for name in names:
value = 0
for word in words:
maybe_name, equals, maybe_value = word.partition('=')
if maybe_name == name and equals == '=':
value = maybe_value
result[name] = value
return result
这可能会有相当大的改进,但很大程度上取决于您的确切规格。我尝试尽可能地创建符合基本逻辑的东西。