繁体   English   中英

如何计算Python中除了注释和文档字符串之外的代码行? [关闭]

[英]How to count lines of code in Python excluding comments and docstrings? [closed]

我想尽可能准确地计算多文件Python项目中的代码行,但不要在总计中包含注释,文档字符串或空行。

我首先尝试使用cloc,它可以作为Debian软件包使用。 但是cloc将大多数文档字符串视为代码 - 即使它们是注释。 更新:不再 - 最近版本的cloc现在将Python文档字符串视为注释。)

我注意到下面的一些注释说文档字符串应该包含在总数中,因为它们可能被代码用来影响运行时的行为,因此算作程序代码/ data / config的一部分。 一个突出的例子是'ply',它要求你用docstrings编写函数,我记得这些函数包含语法和正则表达式,这些都是程序操作的核心。 然而,在我看来这是一个非常罕见的例外。 大多数时候,文档字符串就像评论一样。 具体来说,我知道对于我想要测量的所有代码都是如此。 所以我想从我的行数中排除它们。

注释行可以是python中的代码行。 例如,参见doctest

此外,您将很难找到合理/可靠的方法来将此类案例视为评论或代码:

foo = ('spam', 
       '''eggs
          eggs
          eggs'''
       '''more spam''',
       'spam')

我只想计算注释行,我想大多数程序员都会同意它对于你实际想要测量的任何东西都是一个很好的衡量标准。

将Python文档字符串包含在“代码行”计数中可能是正确的。 通常,编译器会放弃注释,但会解析文档字符串:

参见PEP 257 - Docstring约定

docstring是一个字符串文字,作为模块,函数,类或方法定义中的第一个语句出现。 这样的docstring成为该对象的__doc__特殊属性。

...

Python代码中其他地方出现的字符串文字也可以作为文档。 它们不被Python字节码编译器识别,并且不能作为运行时对象属性访问。

换句话说,文档字符串是以非常实际的方式编译和构成程序的代码。 此外,它们通常由doctest module用于单元测试,作为命令行实用程序的使用字符串,等等。

塔哈尔不计算文档字符串。 这是它的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

你有没有看过http://www.ohloh.net/p/ohcount-对我来说总是相当有钱 - 虽然我不使用python

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM