编写Python-cod的更简洁的方法

2024-06-16 10:43:49 发布

您现在位置:Python中文网/ 问答频道 /正文

在Python中,我想测试Linux命令输出中是否存在关键字。要测试的关键字将作为列表传递,如下所示。我并没有花太多时间在Python上,所以下面是暴力方法。有没有更干净的方法来写这个?在

def test_result (result, mykeys):

  hit = 0
  for keyword in mykeys:
     if keyword in result:
        hit = 1
        print "found a match for " + keyword

  if hit == 1:
     return True


result = "grep says awk"
mykeys = ['sed', 'foo', 'awk']
result = test_result (result, mykeys)

Tags: 方法intest命令列表foriflinux
3条回答

您可以使用正则表达式来完成此操作。形式为a|b|c的正则表达式匹配ab或{}中的任何一个。所以,你需要一些形式上的东西:

import re
p = re.compile('|'.join(mykeys))
return bool(p.search(result))

p.search(result)在整个字符串中搜索正则表达式的匹配项;如果存在,则返回匹配项(true-y),否则返回None(false-y)。将结果转换为bool如果匹配,则返回{},否则{}。在

把这个放在一起:

^{pr2}$

您还可以通过不预编译正则表达式使其更简洁;如果是一次性使用,则可以这样做:

def test_result(result, mykeys):
  return bool(re.search('|'.join(mykeys), result))

有关参考,请阅读Python's ^{} library。在

您的函数做两件事,打印和返回结果。你可以这样把他们分开:

def test_result(result, mykeys):
    return [k in result for k in mykeys]

def print_results(results):
    for result in results:
        print("found a match for " + result)

test_result将返回一个包含所有找到的键的列表,或者返回一个空列表。空列表是假的,因此您可以将其用于任何您想要的测试。打印结果只有在您确实想打印时才需要,否则您可以在其他函数中使用结果。在

如果您只想检查是否存在,而不关心找到了哪个密钥,可以执行以下操作:

^{pr2}$

如果您正在使用python3(正如您应该使用的那样),我相信这将是懒惰的,并且只对列表中需要的内容进行评估。在

请参见A more concise way to write this Python code,以获得最后一个函数的更简洁版本。在

内置的any就可以做到这一点。在

def test_result(result, mykeys):
    return any(key in result for key in mykeys)

相关问题 更多 >