Python:编写可复用正则表达式解析求和函数的问题
问题修复与优化方案
核心问题分析
你的代码存在三个关键问题:
- 缩进错误:
print语句不在函数内部,无法访问函数内的total和count局部变量,直接运行会报错 - 全局变量依赖:函数直接使用外部定义的
fhand,不符合函数封装规范,复用性差 - 描述错误:原print里的"lines that were summed"表述错误,你统计的是数字个数而非行数
修正后的代码
import re # 库导入放在文件顶部,符合Python常规规范 def Ptfs(file_handle): count = 0 total = [] for line in file_handle: numbers = re.findall('[0-9]+', line) for number in numbers: num = int(number) total.append(num) count += 1 # 简化计数写法 # 将输出逻辑放在函数内部,确保能访问局部变量 print(f"总和: {sum(total)}, 共统计到 {count} 个数字") # 使用with语句打开文件,自动关闭避免资源泄漏 with open("file_name", 'r') as fhand: Ptfs(fhand)
修改说明
- 调整库导入位置:把
import re移到文件顶部,便于统一管理依赖 - 优化函数参数:让函数接收文件对象作为参数,不再依赖全局变量,提升函数独立性
- 修正缩进问题:将
print语句缩进至函数内部,确保能访问total和count变量 - 优化文件操作:用
with语句处理文件,无需手动调用close(),更安全规范 - 修正输出逻辑:调整输出文本,明确统计对象为数字个数,用f-string让输出更清晰
- 简化代码写法:用
count += 1替代count = count + 1,代码更简洁
额外提示
如果文件不在当前工作目录,需要传入完整路径,例如with open("/home/user/your_file.txt", 'r') as fhand
内容的提问来源于stack exchange,提问作者Naethan Peters
相关产品推荐
相关产品推荐

