前言
Python 的设计哲学强调「优雅」、「明确」、「简单」。这往往是开发者选择 Python 的重要原因。然而,许多开发者反馈自己编写的 Python 代码并不够优雅,甚至显得臃肿。这通常是因为没有掌握正确的编程习惯和语法特性。
本文将介绍十种 Python 语句的优雅写法,通过对比常规方法与优化方法,帮助你写出更符合 Python 风格(Pythonic)的代码,从而显著提升开发效率和代码质量。
本文详细讲解了十种 Python 优雅写法,涵盖多重赋值、序列解包、三元表达式、链式比较、成员测试、真值判断、any/all 函数、enumerate 遍历、列表推导式及上下文管理等核心语法技巧。通过对比常规写法与优化写法,帮助开发者提升代码质量与开发效率,写出更符合 Python 风格的代码。

Python 的设计哲学强调「优雅」、「明确」、「简单」。这往往是开发者选择 Python 的重要原因。然而,许多开发者反馈自己编写的 Python 代码并不够优雅,甚至显得臃肿。这通常是因为没有掌握正确的编程习惯和语法特性。
本文将介绍十种 Python 语句的优雅写法,通过对比常规方法与优化方法,帮助你写出更符合 Python 风格(Pythonic)的代码,从而显著提升开发效率和代码质量。
当需要同时给多个变量赋值时,常规方法是逐个赋值,而 Python 支持多重赋值。
常规方法:
a = 0
b = 1
c = 2
优雅方法: 直接按顺序对应一一赋值,代码更简洁。
a, b, c = 0, 1, 2
此外,Python 还支持变量交换,无需临时变量:
x, y = 10, 20
x, y = y, x
# 此时 x=20, y=10
在从列表或元组中获取元素时,使用下标索引虽然可行,但不够直观。
常规方法:
info = ['brucepk', 'man', 'python']
name = info[0]
sex = info[1]
tech = info[2]
print(name, sex, tech)
优雅方法: 利用解包直接将元素分配给变量。
info = ['brucepk', 'man', 'python']
name, sex, tech = info
print(name, sex, tech)
如果序列长度不确定,可以使用星号 * 进行扩展解包:
head, *tail = [1, 2, 3, 4]
# head = 1, tail = [2, 3, 4]
定义绝对值函数时,条件表达式比多行 if-else 更紧凑。
常规方法:
x = -6
if x < 0:
y = -x
else:
y = x
print(y)
优雅方法: 使用三元运算符(条件表达式)。
x = -6
y = -x if x < 0 else x
print(y)
连续的范围判断可以使用链式比较,逻辑更清晰。
常规方法:
score = 82
if score >= 80 and score < 90:
level = 'B'
print(level)
优雅方法: 使用链式比较符。
score = 82
if 80 <= score < 90:
level = 'B'
print(level)
判断变量是否属于某个集合时,使用 in 关键字比多次 or 连接更高效且易读。
常规方法:
num = 1
if num == 1 or num == 3 or num == 5:
type_ = '奇数'
print(type_)
优雅方法:
使用 in 检查成员资格。
num = 1
if num in (1, 3, 5):
type_ = '奇数'
print(type_)
在 Python 中,空容器、零值、None 等被视为 False,非空容器或非零数值视为 True。
常规方法:
使用 len() 判断长度。
A, B, C = [1, 3, 5], {}, ''
if len(A) > 0:
print('A 为非空')
if len(B) > 0:
print('B 为非空')
if len(C) > 0:
print('C 为非空')
优雅方法: 直接利用真值测试(Truthy/Falsy)。
A, B, C = [1, 3, 5], {}, ''
if A:
print('A 为非空')
if not B: # B 为空
print('B 为空')
if not C: # C 为空
print('C 为空')
判断多个条件中是否有任意一个满足时,any() 函数比手动拼接 or 更语义化。
常规方法:
math, English, computer = 90, 80, 88
if math < 60 or English < 60 or computer < 60:
print('not pass')
优雅方法:
使用 any() 配合生成器表达式或列表。
math, English, computer = 90, 59, 88
if any([math < 60, English < 60, computer < 60]):
print('not pass')
同理,判断所有条件是否都满足时,all() 函数更为合适。
常规方法:
math, English, computer = 90, 80, 88
if math > 60 and English > 60 and computer > 60:
print('pass')
优雅方法:
使用 all() 函数。
math, English, computer = 90, 80, 88
if all([math > 60, English > 60, computer > 60]):
print('pass')
遍历列表并同时获取索引时,enumerate() 是标准做法。
常规方法:
L = ['math', 'English', 'computer', 'Physics']
for i in range(len(L)):
print(i, ':', L[i])
优雅方法:
使用 enumerate()。
L = ['math', 'English', 'computer', 'Physics']
for k, v in enumerate(L):
print(k, ':', v)
列表生成式(List Comprehension)是 Python 最强大的特性之一,能大幅简化循环构建列表的逻辑。
常规方法:
L = []
for i in range(1, 6):
L.append(i * i)
print(L)
优雅方法: 一行代码搞定。
print([x * x for x in range(1, 6)])
除了列表推导式,字典推导式和集合推导式同样适用:
# 字典推导式
d = {i: i**2 for i in range(5)}
# 集合推导式
s = {x for x in range(10) if x % 2 == 0}
处理文件等资源时,使用 with 语句可自动管理资源释放,避免忘记关闭文件。
常规方法:
f = open('data.txt', 'r')
data = f.read()
f.close()
优雅方法:
with open('data.txt', 'r') as f:
data = f.read()
# 离开 with 块后,文件自动关闭
现代 Python 开发推荐使用类型提示(Type Hints),增强代码的可读性和 IDE 支持。
def greet(name: str) -> str:
return f"Hello, {name}"
掌握这些优雅的写法,不仅能减少代码行数,还能提高代码的可维护性。建议在日常开发中刻意练习,遵循 PEP 8 规范,让 Python 代码真正体现出其简洁之美。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online