如何用更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
相关产品推荐
相关产品推荐

