具有多个条件的列表理解

时间:2019-04-18 03:01:34

标签: python list-comprehension

def detect_long_method(directory):
    path, dirs, files = next(os.walk(directory))
    output = lm.output_long_methods(directory)
    # print (output.stdout)
    split_lines = output.splitlines()
    output_lines = [output.decode('utf-8') for output in split_lines if len(output) > 3 and\
                    ('R0915' in output.decode('utf-8') or 'R0913' in output.decode('utf-8') or 'R0912' in output.decode('utf-8') or \
                    'R0904' in output.decode('utf-8') or 'R0902' in output.decode('utf-8'))]

    return output_lines

此函数的作用是,它运行命令行命令并获取标准输出,并将其分配给变量output。它使用.splitlines()函数分成几行。

output_lines中,它检查每行(以字节为单位)是否包含单词R0915..etc.,并且如果该行的长度超过3,则最后将它们转换为字符串。 / p>

但是,这非常慢,我觉得有一种方法可以更简洁,更高效地编写代码。

有帮助吗?

1 个答案:

答案 0 :(得分:2)

这是一个更有效的脚本:

import os
import re

def detect_long_method(directory):
    path, dirs, files = next(os.walk(directory))
    output = lm.output_long_methods(directory).decode('utf-8')
    # print (output.stdout)
    split_lines = output.splitlines()
    output_lines = [output for output in split_lines if len(output) > 3 and\
                    re.search("(R0915|R0913|R0912|R0904|R0902)", output) is not None]
    return output_lines

如juanpa.arrivillaga建议的那样,使用regular expressions并调用一次decode('utf-8')应该可以缩短执行时间。