一、什么是语法糖
语法糖(Syntactic sugar),直译语法上的糖果,是编程语言中优化后的特殊语法。它不会改变程序底层功能逻辑,也不新增语言能力,但能简化代码写法、提升可读性、降低编码冗余度,让代码书写更简洁流畅。
简单概括:功能不变,写法更优雅,程序员编码体验更好,看似小巧的语法优化,却能大幅精简代码体量。
通俗理解:同样实现一个功能,基础写法繁琐冗长,语法糖用精简句式等价实现,就像吃糖一样省心好用。
二、基础案例:取最大值直观感受语法糖
需求:取出两个数字中的最大值基础常规判断写法
b = 2 c = 3 if b > c: a = b else: a = cPython 语法糖精简写法,效果完全一致
a = max(b, c) a = c > b and c or b a = c if c > b else b a = [b, c][c > b]多种写法殊途同归,精简句式就是 Python 典型语法糖。
三、Python 常见基础语法糖
这类写法在其他编程语言少见,是 Python 特色简洁语法。
# 一行多变量赋值 a = 1; b = 2; c = 3 # 变量快速交换 b, c = c, b # 连续大小判断 a < c < b < 5 # 字符串快速拼接复制 '1' * 100 # 列表直接合并 [1,2,3,4] + [5,6,7,8]四、列表切片语法糖
切片是 Python 最常用、最受欢迎的语法糖,快速截取序列数据。
l = [1, 2, 3, 4, 5] l[2] # 取单个下标元素 l[:3] # 从头截取到下标3 l[3:] # 下标3截取到末尾 l[2:4] # 区间截取 l[:-1] # 倒数截取 l[:] # 完整复制列表 l[::2] # 步长截取五、with 上下文语法糖
with 专门用来自动管理资源,无需手动关闭文件、连接等对象,避免资源泄露。使用前提:对象必须实现__enter__和__exit__内置方法。
# 自动打开、自动关闭文件 with open('example_2.txt', 'r', encoding='utf-8') as f: for line in f: print(line, end='')六、特色 else 语法糖
Python 独有的for-else、while-else、try-else语法,拓展分支判断逻辑。
1. for-else
循环正常结束未触发 break,才会执行 else
for i in range(1): print(i) break else: print('for end')2. while-else
i = 1 while i: print(i) i -= 1 break else: print('while end')3. try-else
无异常时执行 else,异常则跳过
try: 1 / 1 except Exception as e: print('except occured') else: print('it is fine') finally: print('i am finally')七、函数相关语法糖
1. 动态参数 *args **kwargs
灵活接收任意个数位置参数、关键字参数
def example_dynamic_args(*args, **kwargs): print(args) print(kwargs) example_dynamic_args(1,'2', True, name='xiaowu', age=18) l = [1,'2',False] d = {'name': 'xiaoming', 'age': '16'} example_dynamic_args(*l, **d)2. lambda 匿名函数
单行简易函数,适合临时简单逻辑,无需定义函数名
# 基础匿名函数 lambda x: x * 2 # 实际排序应用 in_dict = {'a': 10, 'b': 2, 'c': 3} out_dict = sorted(in_dict.items(), key=lambda x: x[1]) print(out_dict)八、四大推导式语法糖
极简实现数据筛选、转换,一行代码替代多层循环判断
1. 列表推导式
in_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 8, 7] array = [i for i in in_list if i % 2 != 0] print(array)2. 生成器推导式
节省内存,惰性取值
array = (i for i in in_list if i % 2 != 0) print(array)3. 集合推导式
自动去重
array = {i for i in in_list if i % 2 != 0} print(array)4. 字典推导式
快速构建新字典
array = {i: i * 2 for i in in_list if i % 2 != 0} print(array)九、yield 生成器语法糖
Python 核心语法糖,生成器底层核心,协程实现基础,分批返回数据,内存占用极低。
def example_generator(in_list): for i in in_list: yield i * 2十、装饰器语法糖
Python 高阶核心语法糖,不修改原函数代码,就能新增日志、权限、计时等功能。
def example_decorator(func): def inner(): func() return inner十一、总结
- 语法糖不改变程序功能,只优化代码写法,提升开发效率;
- Python 拥有切片、推导式、with、lambda、装饰器等海量特色语法糖;
- 合理使用语法糖可以精简代码、增强可读性,是 Python 编程必备技巧;
- 高阶语法糖生成器、装饰器,是进阶开发、高并发项目的核心基础。