Python 的语法糖是些"偷懒小技巧"——不影响功能,但能让代码更短、更顺、更像人话。整理了些高频实用的:

1. 推导式(列表/字典/集合)

用一行搞定"循环+条件+生成序列",替代冗长的 for 循环。

# 列表推导式(替代 for+append)
nums = [i*2 for i in range(5) if i%2==0]  # [0, 4]

# 字典推导式(替代 for+键值对)
dict1 = {k: v*2 for k, v in {'a':1, 'b':2}.items() if v>1}  # {'b':4}

# 集合推导式(去重+生成)
set1 = {i%3 for i in range(10)}  # {0,1,2}

2. 三元表达式

一行搞定简单的 if-else 判断,替代四五行的分支。

# 替代:
# if score >=60:
#     res = "及格"
# else:
#     res = "不及格"
res = "及格" if score >=60 else "不及格"

3.切片操作

Python的切片操作是处理序列(列表、字符串、元组等)的强大语法糖,通过简洁的[start:stop:step]格式,能快速实现截取、反转、跳步等操作,避免冗长的循环代码。以下是具体用法示例:

# 基础序列(以列表为例,字符串、元组用法相同)
nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
text = "abcdefghij"


# 1. 基本切片:[start:stop](左闭右开,默认步长1)
print(nums[2:5])   # 从索引2取到4(不含5)→ [2, 3, 4]
print(text[3:7])   # 字符串切片 → "defg"


# 2. 省略参数:自动补全默认值
print(nums[:5])    # 省略start → 从开头取到4 → [0, 1, 2, 3, 4]
print(nums[3:])    # 省略stop → 从3取到末尾 → [3, 4, 5, 6, 7, 8, 9]
print(nums[:])     # 省略所有 → 复制整个序列 → [0, 1, 2, ..., 9]


# 3. 负数索引:从末尾开始计数(-1是最后一个元素)
print(nums[-3:])   # 取最后3个 → [7, 8, 9]
print(nums[:-2])   # 取到倒数第2个(不含)→ [0, 1, 2, 3, 4, 5, 6, 7]
print(nums[-5:-2]) # 从倒数第5到倒数第3 → [5, 6, 7]


# 4. 步长控制:[start:stop:step]
print(nums[::2])   # 步长2 → 隔一个取一个 → [0, 2, 4, 6, 8]
print(nums[1::3])  # 从1开始,步长3 → [1, 4, 7]


# 5. 反转序列:步长为-1(最常用的反转语法糖)
print(nums[::-1])  # 反转列表 → [9, 8, 7, ..., 0]
print(text[::-1])  # 反转字符串 → "jihgfedcba"


# 6. 切片赋值(仅列表支持,字符串/元组不可变)
nums[2:5] = [20, 30, 40]  # 替换索引2-4的元素
print(nums)  # → [0, 1, 20, 30, 40, 5, 6, 7, 8, 9]

nums[5:8] = [500]  # 长度不匹配时自动扩展/收缩
print(nums)  # → [0, 1, 20, 30, 40, 500, 8, 9]


# 7. 清空列表(保留容器)
nums[:] = []
print(nums)  # → []

核心优势:

  • 无需手动写循环截取,一行代码完成复杂操作
  • 支持负数索引和步长,轻松处理"从末尾取n个"、"反转"等场景
  • 切片操作返回新序列,不修改原序列(除非主动赋值)

无论是处理列表、截取字符串还是反转序列,切片都能让代码更简洁直观,是Python中最受欢迎的语法糖之一。



### 4. 星号表达式(*)  
灵活解包/收集元素,替代手动处理可变参数或拆分序列。  
```python
# 解包序列
a, *mid, b = [1,2,3,4,5]  # a=1, mid=[2,3,4], b=5

# 合并列表
list1 = [1,2]
list2 = [3,4]
merged = [*list1, *list2]  # [1,2,3,4]

# 函数可变参数
def func(*args):  # args 收集所有位置参数成元组
    print(args)
func(1,2,3)  # (1,2,3)

5. 装饰器(@)

给函数/类"戴帽子",在不修改原代码的情况下加功能(日志、缓存等),替代手动嵌套调用。

def log(func):
    def wrapper(*args):
        print(f"调用了{func.__name__}")
        return func(*args)
    return wrapper

@log  # 等价于:add = log(add)
def add(a,b):
    return a+b

add(1,2)  # 打印"调用了add",返回3

6. with 语句

自动处理资源(文件、连接等)的"打开-关闭",替代 try-finally 一堆收尾代码。

# 替代:
# f = open("file.txt")
# try:
#     data = f.read()
# finally:
#     f.close()
with open("file.txt", "r") as f:
    data = f.read()  # 自动关闭文件

7. 海象运算符(:=,3.8+)

在表达式里直接赋值,少写一行代码(尤其适合条件判断时)。

# 替代:
# n = len(list1)
# if n > 5:
#     print(n)
if (n := len(list1)) > 5:  # 赋值+判断一步到位
    print(n)

8. 链式比较

直接连写比较条件,替代用 and 拼接的冗长表达式。

# 替代:18 < age and age < 60
if 18 < age < 60:
    print("成年且未退休")

9. f-string(3.6+)

字符串格式化的"天花板",比 % 和 format 更直观,支持表达式嵌入。

name = "张三"
age = 20
# 替代:"我叫%s,今年%d岁" % (name, age)
print(f"我叫{name},今年{age+1}岁")  # 直接嵌变量/表达式

10. 字典合并(**)

快速合并多个字典,替代 update 或循环赋值。

d1 = {'a':1}
d2 = {'b':2}
merged = {** d1, **d2}  # {'a':1, 'b':2}(重复键后者覆盖)

这些语法糖的核心是"少写废话"——让代码聚焦逻辑,而不是格式。熟练了之后,写起来顺,读起来也爽。

更多推荐