You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用更Pythonic的方式编写代码行数统计脚本?

优化Python代码统计有效行数的Pythonic写法

我编写了一段Python脚本,从命令行获取文件名,统计文件中忽略注释和空行的代码行数,功能正常。但我不确定使用的较长列表推导式是否符合最佳实践,想找到更Pythonic的写法,养成良好编程习惯。

原脚本代码

from sys import argv

try:
    with open(argv[1],"r") as file:
        content = [line.strip() for line in file.readlines() if line.strip()!=""] #stores all char lines as strings

        i=0
        for line in content:
            if line[0].isalnum():
                i += 1
            else:
                continue

        print(f"Total lines of code: {i}")

except FileNotFoundError:
    print("that file doesn't exist")

优化后的最终脚本

from sys import argv

try:
    with open(argv[1],"r") as file:
        contentcount = sum(1 for line in file 
                    if (stripstart := line.strip()) 
                    and not stripstart.startswith("#"))
        print(f"Total lines of code: {contentcount}")
except FileNotFoundError:
    print(f"{argv[1]} doesn't exist")
finally:
    file.close()

改动说明

  • 移除列表的使用,避免大文件导致的内存问题:原脚本通过file.readlines()生成完整行列表,大文件会占用大量内存;优化后直接迭代文件对象,逐行处理,内存占用更高效。
  • 移除重复的字符串处理:原脚本在列表推导式中重复调用line.strip(),优化后通过海象运算符复用处理结果,减少冗余计算。
  • 在异常处理中明确显示缺失的文件名:原错误提示仅模糊说明文件不存在,优化后直接输出用户指定的文件名,提升调试清晰度。
  • 显式关闭文件:添加finally块确保文件在任何情况下都会被关闭,避免特殊场景下的资源泄漏(注:with上下文管理器本身已自动处理关闭,此为额外严谨性保障)。
  • 替换逻辑,改为检查每行是否非空且不以#开头:原判断逻辑范围过窄,优化后更精准定位注释和空行。
  • 确保逻辑不会错误拒绝意外字符,仅过滤注释和空行:原逻辑会误判以非字母数字开头的有效代码(如装饰器、带前置空格的函数定义等),优化后仅过滤目标内容,避免统计偏差。

内容的提问来源于stack exchange,提问作者tron359

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 22:04:53