【发布时间】:2020-06-27 19:45:00
【问题描述】:
方法 A :在这种方法中,我执行决策时没有将“行”从字符串转换为列表。
def isVariable(line):
if not ';' in line:
return False
if ('public' in line or 'private' in line or 'protected' in line) and ('int' in line or 'String' in line or 'float' in line):
return True
else:
return False
line = 'private int name;'
print(isVariable(line))
方法 B :此方法涉及在将“行”转换为列表后执行决策。
def isVariable(line):
if not ';' in line:
return False
modifiers = ['private','protected','public']
datatypes = ['int','float','String']
linelist = list(line.split())
if linelist[0] in modifiers and linelist[1] in datatypes:
return True
else:
return False
line = 'private int name;'
print(isVariable(line))
【问题讨论】:
-
只有第二个变体确保关键字是完整的单词。第一种方法会在
private_value中找到例如private -
您是否尝试分析您的代码?请注意,
isVariable会更快,如果您不创建每个函数调用的列表,而是引用一些全局常量,也许使用set而不是列表(尽管对于这么小的东西,它不会真的很重要 -
@juanpa.arrivillaga 非常有帮助! :)
-
@MichaelButscher 你所说的“private_value 中的私有”是什么意思?
-
第二个答案将减少解析行的次数。它只遍历整行一次以将其拆分为单词。在以后的检查中,它只需要查看适当的单词并检查它。再次更有效率。额外的好处是它可以确保它们位于正确的位置,正如@MichaelButscher 所指出的那样,它还可以确保它们是完全匹配而不是部分匹配。所以从性能和准确性上来说,第二个更好。
标签: python python-3.x list if-statement list-comprehension