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>
但是,这非常慢,我觉得有一种方法可以更简洁,更高效地编写代码。
有帮助吗?
答案 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')
应该可以缩短执行时间。