当前位置:首页>python>Python 代码写得漂亮是一种什么体验?试试这几个 Pythonic 写法

Python 代码写得漂亮是一种什么体验?试试这几个 Pythonic 写法

  • 2026-10-11 05:38:06
Python 代码写得漂亮是一种什么体验?试试这几个 Pythonic 写法
代码是写给人看的,顺便让机器执行。
这几个代码风格技巧,让你的 Python 代码看起来像高级工程师写的。

1. 用 dict 解包合并替代 update()

看起来没问题,但其实有更好的方式:

merged = base.copy()merged.update(override)

优雅,太优雅了:

merged = {**base, **override}

字典解包语法简洁直观,Python 3.9+ 还能用 | 运算符:

merged = base | override。


2. 用 Path 替代 os.path 拼路径

一开始以为只能这么写:

import ospath = os.path.join(os.path.expanduser('~'), 'data', 'file.txt')if os.path.exists(path):    os.remove(path)

一行代码就能搞定:

from pathlib import Pathpath = Path.home() / 'data' / 'file.txt'if path.exists():    path.unlink()

Path 是面向对象的路径操作,/ 运算符拼路径直观优雅,还跨平台,Python 3.4+ 内置。


3. 用 Enum 替代魔法数字/字符串

大多数人的代码答案通常长这样:

status = 1  # 1=待处理 2=处理中 3=完成if status == 1:    handle_pending()

重构之后同事以为我换了个人:

from enumimport Enumclass Status(Enum):    PENDING = 1    PROCESSING = 2    DONE = 3if status == Status.PENDING:    handle_pending()

魔法数字/字符串满天飞是 bug 温床。

Enum 让代码自文档化,IDE 还能自动补全。


4. 用 __post_init__ 做 dataclass 后处理

刚学 Python 的时候我这么写过:

@dataclassclass Config:    width: int    height: int    area: int  # 还得手动算

后来我发现了这个写法,直接封神:

@dataclassclass Config:    width: int    height: int    area: int = field(init=False)    def __post_init__(self):        self.area = self.width * self.height

__post_init__ 在 __init__ 后自动调用,适合计算派生字段。area 不用传,自动算好。


5. 用 except Exception 替代裸 except

很多教程会教你这么写:

try:    risky_operation()except:    log_error()

换成这样就优雅多了:

try:    risky_operation()except Exception as e:    log_error(e)

裸 except 连 KeyboardInterrupt、SystemExit 都捕获,程序都退不了,至少 catch Exception。


速查表

场景别这样写试试这样
合并字典dict.update(){**base, **override}
拼文件路径os.path.join()Path() / 'subdir'
魔法数字status = 1Status.PENDING
dataclass 计算字段手动赋值__post_init__()
捕获异常裸 except:except Exception as e:

这些改动不需要你学新框架,也不需要重构架构,你只需要在下次写代码时,稍微嫌弃一下自己的旧写法。

今天就挑你代码里最常见的一个场景,用右边的写法重写一遍。你可能会发现:代码变短了,bug 变少了,连心情都变好了。

最新文章

随机文章