分享一些Python 中短小精悍的“骚操作”
今天分享一些Python 中短小精悍的语法技巧,能让你写出更简洁优雅的代码:
good good study, day day up!
1.列表推导式 + 条件过滤
# 生成偶数的平方
squares = [x**2 for x in range(10) if x % 2 == 0]
# 结果:[0, 4, 16, 36, 64]
2.三元表达式
# 单行条件赋值
result = "Yes" if 5 > 3 else "No"
# 结果:"Yes"
3.交换变量值
a, b = 5, 10
a, b = b, a # 无需临时变量
print(a, b) # 10 5
4.合并字典 (Python 3.9+)
dict1 = {"a": 1, "b": 2}
dict2 = {"b": 3, "c": 4}
merged = dict1 | dict2 # {'a':1, 'b':3, 'c':4}
5.快速反转字符串/列表
s = "hello"
print(s[::-1]) # "olleh"
lst = [1, 2, 3]
print(lst[::-1]) # [3, 2, 1]
6.同时获取索引和值 (enumerate)
for index, value in enumerate(["a", "b", "c"]):
print(index, value)
# 0 a
# 1 b
# 2 c
7.合并两个列表成字典 (zip)
keys = ["a", "b", "c"]
values = [1, 2, 3]
d = dict(zip(keys, values)) # {'a':1, 'b':2, 'c':3}
8.海象运算符 (Python 3.8+)
# 在表达式中赋值
if (n := len("hello")) > 3:
print(f"长度是{n}") # 长度是5
9.展开多层嵌套列表
nested = [[1, 2], [3, 4], [5]]
flat = [num for sublist in nested for num in sublist]
# [1, 2, 3, 4, 5]
10.快速去重并保持顺序
lst = [3, 1, 2, 3, 2]
unique = list(dict.fromkeys(lst)) # [3, 1, 2]
11.链式比较
x = 5
print(3 < x < 10) # True (等价于 3 < x and x < 10)
12.f-string 调试 (Python 3.8+)
value = 42
print(f"{value=}") # 输出 value=42
13.多变量赋值
a, *b, c = [1, 2, 3, 4, 5]
print(a, b, c) # 1 [2,3,4] 5
14.生成器表达式省内存
# 不会立即生成所有元素
sum_squares = sum(x**2 for x in range(1000000))
15.用_忽略不需要的值
# 解包时忽略某些值
a, _, c = (1, 2, 3) # a=1, c=3
16.字典的setdefault
d = {}
for k, v in [("a", 1), ("a", 2)]:
d.setdefault(k, []).append(v)
# {'a': [1, 2]}
17.上下文管理器打开文件
with open("file.txt") as f:
content = f.read()
# 自动关闭文件
18.any/all快速判断
nums = [2, 4, 6, 8]
print(all(n%2 ==0 for n in nums)) # True
print(any(n >10 for n in nums)) # False
19.用*解包参数
def sum(a, b, c):
return a + b + c
values = [1, 2, 3]
print(sum(*values)) # 6
20.itertools模块黑魔法
from itertools import permutations, combinations
# 排列组合
print(list(permutations("ABC", 2))) # [('A','B'), ('A','C'), ...]
print(list(combinations("ABC", 2))) # [('A','B'), ('A','C'), ...]
注意:可读性优先,不要为了炫技而过度使用!