Python代码规范故事——商人的账本管理术
主题:字符串和资源如同商人的库存管理。
知识点:字符串格式、文件处理、日志、错误消息。
场景:繁忙的市场,商人李四管理Python账本脚本,字符串操作和未关闭文件导致问题。
故事:
李四的账本脚本效率低下,字符串拼接缓慢,未关闭文件耗尽资源。她请教一位智者,学习字符串格式化。“用f字符串清晰简洁,”智者说:
name = "李四"
score = 42
entry = f"商人: {name}; 分数: {score}"
对于旧代码,%或.format()可接受,但循环中禁用+拼接—like堆积低效的货物。李四学会用join:
entries = ["<table>"]
for item in inventory:
entries.append(f"<tr><td>{item}</td></tr>")
entries.append("</table>")
ledger = "".join(entries)
对于引号,李四统一用单引号(')或双引号(“),文档字符串和多行字符串用三重双引号(”“”)。为避免缩进问题,她用textwrap.dedent():
import textwrap
message = textwrap.dedent("""\
亲爱的客户,
您的订单已准备好。
""")
print(message)
智者接着教导文件处理。“用with显式关闭文件,”他说,防止资源泄漏:
with open("ledger.txt") as file:
for line in file:
print(line)
对于非文件资源如套接字,李四用contextlib.closing()。这确保市场资源充足。
最后,李四学习日志记录。“日志消息用%,不要f字符串,”智者建议,便于查询:
import logging
logging.info("订单 %s 已为 %s 处理", order_id, customer)
对于错误消息,李四确保精准清晰:
if not 0 <= price <= 100:
raise ValueError(f"无效价格: {price!r}")
故事结尾,李四的账本高效,字符串整洁,资源安全,日志清晰,市场声誉大增。
涵盖知识点:
- 字符串格式(f字符串、%、.format;循环禁用+,用join)。
- 引号(统一单/双引号,三重"""用于文档/多行)。
- 文件处理(with语句,非文件用contextlib.closing)。
- 日志(消息用%,非f字符串)。
- 错误消息(精准、清晰、易grep)。