此函数获取在命令行上写入的文件名,然后打印文件的代码行数,忽略注释和空行。
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")
它按预期运行,尽管我不确定在这里使用较长的列表理解是否是一个好的做法,特别是对于我塞入其中的所有字符串方法。
我尝试将空字符串检查放入 bool 块中,但它似乎可读性较差,我想减少对 bool 循环的依赖。
一些建议,不一定是“Pythonic”,但无论如何都是好的:
strip()
两次continue
改进:
list
(您创建了两个,一个包含不必要的 .readlines()
调用,另一个包含 listcomp 本身):=
,又名赋值表达式)来避免strip
两次sum
功能来合计else: continue
控制循环中的所有其他代码时,
if
毫无意义缩写代码:
from sys import argv
try:
with open(argv[1],"r") as file:
i = sum(1 for line in file
if (stripped := line.strip()) and stripped.isalnum())
print(f"Total lines of code: {i}")
except FileNotFoundError:
print("that file doesn't exist")
这涉及到零临时
list
(因此只要任何给定的行不超过您的可用内存,它就可以处理任何大小的文件),并且作为奖励,运行速度应该会稍快一些。