1. 一行超长表达式:你以为自己在写诗?
别把Python当压缩包用。很多人为了“炫技”,硬塞一整行逻辑:
result = [x * 2for x in range(100) if x % 3 == 0and x > 10and'5'notin str(x)]
可读性直接归零。超过80字符的行,PEP 8都替你脸红。拆开它!
filtered = (x for x in range(100) if x % 3 == 0and x > 10and'5'notin str(x))result = [x * 2for x in filtered]
眼睛舒服了,bug也少了。
2. 变量名全靠猜:a、b、c是你的亲儿子?
见过用x1, tmp2, data_thing命名的吗?这不是代码,这是谜语大会。
defcalc(a, b): tmp = a + b res = tmp * 0.9return res
换成这样,同事再也不想打你:
defapply_discount(original_price, tax): gross_total = original_price + tax final_price = gross_total * 0.9return final_price
变量名是文档的第一行。
3. 异常吞得比饭还快:except: pass 是原罪
这段代码你肯定写过👇
try: do_something_risky()except:pass
表面风平浪静,实则地雷遍地。连什么错都不知道,怎么修?
正确姿势:
try: response = requests.get(url, timeout=5)except requests.Timeout: logger.warning("请求超时")except requests.ConnectionError: logger.error("网络连接失败")
吞异常=埋炸弹,迟早炸自己脸上。💣
4. 函数又长又臭:一个函数干十件事?
有些函数长得像小说章节。动辄上百行,缩进套五层,return藏在第98行。
函数就该“专一”。单一职责不是口号,是保命符。
defprocess_user_data(users): validated = validate_users(users) enriched = enrich_with_profile(validated) saved_ids = save_to_db(enriched) notify_admin(saved_ids)return len(saved_ids)
每一步拆成小函数,逻辑清晰,测试也好写。
5. 魔法数字满天飞:3.1415926 是啥?
代码里突然冒出个 if status == 7:谁看得懂?你自己三天后都懵。
用常量代替魔法值:
USER_ACTIVE = 1USER_SUSPENDED = 7USER_DELETED = 9if user.status == USER_SUSPENDED: send_warning_email(user)
或者用 Enum 更优雅:
from enum import IntEnumclassUserStatus(IntEnum): ACTIVE = 1 SUSPENDED = 7 DELETED = 9
代码自解释,才是高级感。
6. 过度设计:为了模式而模式
刚学完设计模式,恨不得给hello.py加个工厂+策略+观察者。结果:三行逻辑,三十行模板代码。
简单问题,别复杂化。Python 的哲学是“简单优于复杂”。
比如,你真的需要这个吗?
classMessageSenderFactory:defcreate_sender(self, type):if type == "email":return EmailSender()elif type == "sms":return SMSSender()
其实一行就够了:
senders = {"email": send_email, "sms": send_sms}senders["email"](user)
少即是多,KISS 原则永不过时。
写在最后:丑代码不是能力问题,是态度问题
我们不是在写机器能跑的代码,是在写人能看懂的代码。据统计,开发者70%的时间花在读代码,而非写代码(来源:IEEE Software)。
下次提交前,问自己一句:“三个月后的我,会感谢现在的我,还是想穿越回来掐死我?”
代码如字迹,见码如见人。别让同事在你的代码里迷路,更别让自己成为“反面教材”。