【问题标题】:Which method is more efficient and better to do this task, also why? Please guide [closed]哪种方法更有效,更好地完成这项任务,为什么?请指导[关闭]
【发布时间】: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


【解决方案1】:

可能最有效的方法是

import re

def isVariable(line):
    return re.fullmatch('(private|protected|public) (int|float|string) [a-zA-Z_]+;', line)

line = 'private int name;'
print(isVariable(line))

【讨论】:

  • 这很好,但它允许的空白数量应该更灵活。一次在函数外部构建一个编译模式并在函数内部使用它可能会更好。
  • @GlennMackintosh 您的解决方案绝对是灵活的,但在这项任务中,我们不允许使用内置函数。
  • @RabiSiddique 这不是我的答案,这是 MerlinKatz 的好答案。我刚刚对他的回答发表了评论。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-01-13
  • 2013-01-28
  • 1970-01-01
  • 1970-01-01
  • 2016-08-13
  • 2012-09-09
  • 1970-01-01
相关资源
最近更新 更多