Python 入门高效编程技巧指南
Python 提供了多种高效编程技巧,涵盖变量交换、推导式、计数器、JSON 格式化及迭代工具等核心功能。本文详细解析了列表、字典推导式的用法,介绍了 collections 和 itertools 模块的高级特性,并通过 FizzBuzz 等实例展示了简洁的代码实现方式。同时修正了旧版本语法,确保代码在 Python 3 环境下运行,帮助开发者提升编码效率与可读性。
Python 提供了多种高效编程技巧,涵盖变量交换、推导式、计数器、JSON 格式化及迭代工具等核心功能。本文详细解析了列表、字典推导式的用法,介绍了 collections 和 itertools 模块的高级特性,并通过 FizzBuzz 等实例展示了简洁的代码实现方式。同时修正了旧版本语法,确保代码在 Python 3 环境下运行,帮助开发者提升编码效率与可读性。
Python 以其简洁的语法和强大的标准库著称,适合快速开发。本文整理了 Python 编程中的常用高效技巧,涵盖变量操作、数据结构推导、内置模块使用及代码优化等方面,帮助开发者编写更简洁、可读性更强的代码。
在 C++ 等语言中,交换两个变量的值通常需要引入一个临时变量。Python 支持元组解包(Tuple Unpacking),可以一行代码完成交换。
a = 3
b = 6
a, b = b, a
print(a)
print(b)
原理说明:右侧 b, a 会先被计算为一个元组 (6, 3),然后左侧的 a, b 依次接收元组中的值。这种方式不仅简洁,而且避免了临时变量的内存开销。
列表推导式(List Comprehensions)是 Python 的标志性特性。从 Python 3.1 开始,相同的语法也适用于创建集合(Set)和字典(Dictionary)。
some_list = [1, 2, 3, 4, 5, 2, 5, 1, 4, 8]
even_set = {x for x in some_list if x % 2 == 0}
print(even_set)
# 输出:{2, 4, 8}(顺序可能不同)
d = {x: x % 2 == 0 for x in range(1, 11)}
print(d)
# 输出:{1: False, 2: True, ...}
注意:集合字面量可以直接用 {} 表示,无需调用 set() 函数,但空集合必须使用 set(),因为 {} 默认表示空字典。
统计元素出现频率是常见任务。collections 模块提供了 Counter 类,它是 dict 的子类,专门用于计数。
from collections import Counter
c = Counter("hello world")
print(c)
# 输出:Counter({'l': 3, ' ': 1, 'o': 2, ...})
# 获取最常见的元素
print(c.most_common(2))
# 输出:[('l', 3), ('o', 2)]
JSON 序列化后通常是一行长字符串,难以阅读。使用 indent 参数可以格式化输出,便于调试或日志记录。
import json
data = {
"status": "OK",
"count": 2,
"results": [
{"age": 27, "name": "Oz", "lactose_intolerant": True},
{"age": 29, "name": "Joe", "lactose_intolerant": False}
]
}
# 无缩进
print(json.dumps(data))
# 有缩进
print(json.dumps(data, indent=2))
此外,pprint 模块也可以用于美化其他对象的打印输出。
FizzBuzz 是经典的编程练习。利用 Python 的字符串切片和布尔逻辑,可以用极简代码实现。
for x in range(1, 101):
print("fizz"[x % 3 * len("fizz")::] + "buzz"[x % 5 * len("buzz")::] or x)
解析:
x % 3 == 0,则 x % 3 * len("fizz") 为 0,切片 "fizz"[0::] 返回完整字符串。x % 3 != 0,索引大于长度,切片返回空字符串。or x 输出数字。Python 允许将 if-else 语句写在单行内,常用于简单的条件赋值。
result = "Hello" if True else "World"
print(result)
Python 支持多种类型的连接方式,但在 Python 3 中,print 是函数,且不再支持反引号转义。
nfc = ["Packers", "49ers"]
afc = ["Ravens", "Patriots"]
# 列表相加
print(nfc + afc)
# 字符串转换后连接
print(str(1) + " world")
# 逗号分隔打印(自动添加空格)
print(1, "world")
Python 支持数学上的链式比较,使代码更接近自然语言描述。
x = 2
if 1 < x < 3:
print(x)
等价于 if (1 < x) and (x < 3):,但更简洁且不易出错。
使用 zip() 函数可以同时遍历多个可迭代对象,常用于并行处理数据。
nfc = ["Packers", "49ers"]
afc = ["Ravens", "Patriots"]
for team_a, team_b in zip(nfc, afc):
print(f"{team_a} vs. {team_b}")
enumerate() 函数可以在遍历时同时获取索引和元素。
teams = ["Packers", "49ers", "Ravens", "Patriots"]
for index, team in enumerate(teams):
print(index, team)
使用列表推导式替代传统的循环追加,代码更紧凑。
numbers = [1, 2, 3, 4, 5, 6]
# 传统写法
even = []
for number in numbers:
if number % 2 == 0:
even.append(number)
# 推导式写法
even = [number for number in numbers if number % 2 == 0]
类似列表推导,字典推导可用于构建键值对映射。
teams = ["Packers", "49ers", "Ravens", "Patriots"]
print({key: value for value, key in enumerate(teams)})
使用乘法操作符可以快速初始化包含相同元素的列表。
items = [0] * 3
print(items)
# 输出:[0, 0, 0]
注意:对于可变对象(如列表),直接复制引用可能导致意外修改,建议深拷贝。
join() 方法是连接字符串序列的高效方式,优于循环拼接。
teams = ["Packers", "49ers", "Ravens", "Patriots"]
print(", ".join(teams))
# 输出:Packers, 49ers, Ravens, Patriots
使用 get() 方法可以避免 KeyError 异常,并提供默认值。
data = {"user": 1, "name": "Max", "three": 4}
# 推荐方式
is_admin = data.get("admin", False)
切片操作灵活,可提取前缀、后缀、步长序列等。
x = [1, 2, 3, 4, 5, 6]
print(x[:3]) # 前 3 个
print(x[1:5]) # 中间 4 个
print(x[3:]) # 最后 3 个
print(x[::2]) # 奇数项(步长为 2)
print(x[1::2]) # 偶数项
itertools 模块提供高效的迭代器工具,如生成组合。
from itertools import combinations
teams = ["Packers", "49ers", "Ravens", "Patriots"]
for game in combinations(teams, 2):
print(game)
在 Python 中,True 和 False 是内置常量,虽然技术上可以重新赋值,但这会破坏语言语义,强烈不建议这样做。
# 不推荐:修改内置常量
# False = True
# if False:
# print("Hello")
保持代码的可读性和规范性是专业开发者的基本素养。
以上技巧涵盖了 Python 基础语法的高级用法。掌握这些特性不仅能减少代码行数,还能提高程序运行效率。建议在实际项目中结合具体场景灵活运用,并始终遵循 PEP 8 编码规范。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 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