我希望尽可能准确地计算多文件Python项目中的代码行数,但不包括注释、文档字符串或空行。
我首先尝试使用cloc,它以Debian包的形式提供。但是cloc将大多数文档字符串视为代码-即使它们是注释。( Python:不再-最新版本的cloc现在将Python文档字符串视为注释。)
我注意到下面的一些评论说文档字符串应该包括在总数中,因为它们可能被代码用来影响运行时的行为,因此被计入程序代码/数据/配置的一部分。一个突出的例子是'ply',它要求你用文档字符串编写函数,据我回忆,文档字符串包含对程序操作至关重要的语法和正则表达式。然而,在我看来,这似乎是一个非常罕见的例外。大多数情况下,文档字符串的作用类似于注释。具体地说,我知道一个事实,即对于我想要测量的所有代码都是正确的。因此,我想将它们排除在我的行数之外。
发布于 2012-01-31 17:08:35
将Python文档字符串包括在“代码行”计数中可能是正确的。通常情况下,注释会被编译器丢弃,但文档字符串会被解析:
请参阅PEP 257 - Docstring Conventions
文档字符串是作为模块、函数、类或方法定义中的第一条语句出现的字符串文字。这样的文档字符串成为该对象的
__doc__
特殊属性。
..。
在Python代码中,出现在其他地方的字符串字面值也可以作为文档。它们不能被字节码编译器识别,并且不能作为运行时对象属性访问。
换句话说,文档字符串是以一种非常真实的方式编译并构成程序代码的。此外,它们通常由doctest module
用于单元测试,作为命令行实用程序的使用字符串,等等。
发布于 2012-01-31 17:08:12
注释行可以是python中的代码行。请参见doctest
示例。
此外,您将很难找到一种合理/可靠的方法来将这种情况视为注释或代码:
foo = ('spam',
'''eggs
eggs
eggs'''
'''more spam''',
'spam')
只需计算注释行,我想大多数程序员都会同意这是一个很好的衡量标准,无论你实际试图衡量的是什么。
发布于 2013-01-05 18:17:43
Tahar不计算文档字符串。下面是它的count_loc函数:
def count_loc(lines):
nb_lines = 0
docstring = False
for line in lines:
line = line.strip()
if line == "" \
or line.startswith("#") \
or docstring and not (line.startswith('"""') or line.startswith("'''"))\
or (line.startswith("'''") and line.endswith("'''") and len(line) >3) \
or (line.startswith('"""') and line.endswith('"""') and len(line) >3) :
continue
# this is either a starting or ending docstring
elif line.startswith('"""') or line.startswith("'''"):
docstring = not docstring
continue
else:
nb_lines += 1
return nb_lines
https://stackoverflow.com/questions/9076672
复制相似问题