python常见高级语法结构 | Python common advanced syntax structure

上下文管理器语法(with语法)

本质是简化资源管理,比如文件、网络连接、锁等,with 用来 自动管理资源的打开和关闭,避免你忘记释放资源或忘记写 close()

with 表达式 [as 变量]:
代码块

一般写法(Python)

1
2
3
4
5
6
7
file = open("example.txt", "r")
try:
content = file.read()
print(content)
finally:
file.close() # 手动关闭

python的语法糖

1
2
3
with open("example.txt", "r") as file:
content = file.read()
print(content)

匿名函数(lambda函数)

匿名函数就是没有名字的函数,不需要 def 和函数名,用于返回一个表达式的值,是一个 表达式,而不是语句。特点是:用来定义小型、临时、一次性函数的简洁写法。常用于排序、过滤、映射、组合等场景。

lambda 参数1, 参数2, … : 表达式

限制 说明
只能写一行表达式 不能有多行语句
通常用于简单函数 复杂逻辑推荐用 def
是函数对象 可以赋值、传递给其他函数

一般写法(Python)

1
2
3
4
def add(x, y,z):
return x + y + z

print(add(1,1,1)) # 3

Python语法糖

1
2
add = lambda x, y, z: x + y + z    # lambda 表达式
print(add(1, 1, 1)) # 3

进阶写法(lambda + 函数返回)

1
2
3
4
5
6
def make_adder(n):
return lambda x,y: x + y + n

add5 = make_adder(1)
print(add5(1,1)) # 3

装饰器(函数装饰器或类装饰器)

装饰器本质是一个 函数,接收一个函数作为参数,并返回一个新的函数。其特点是:给函数/类添加额外行为,不改变原函数代码,不改变函数的调用方式。常见应用场景有:

场景 举例说明
日志记录 @log 打印函数调用情况
计时器 @timer 记录函数运行耗时
权限验证 @auth_required 限制未登录用户
缓存 @lru_cache 加快函数调用效率
Django/Flask Web 路由 @app.route(“/index”)

函数装饰器

  1. 以函数为例,这是一个普通函数,无装饰器
1
2
3
4
5
6
7
def say_hello():
print('hello')
say_hello() # hello
'''
输出结果
hello
'''
  1. 这是一个普通函数,有装饰器(函数返回函数)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 装饰器
def simple_decorator(func): # 装饰器函数,接收一个函数作为参数
def wrapper(): # 包装函数
print('正在执行额外行为!') # 额外功能
func() # 调用原函数
return wrapper # 返回包装后的函数

def say_hello():
print('hello')

# “手动装饰”
say_hello = simple_decorator(say_hello) # say_hello
say_hello()

'''
输出结果
正在执行额外行为!
hello
'''
  1. 使用 @装饰器名 来自动装饰(装饰器最佳用法),@装饰器名 放在函数定义上方
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 装饰器
def simple_decorator(func): # 装饰器函数,接收一个函数作为参数
def wrapper(): # 包装函数
print('正在执行额外行为!') # 额外功能
func() # 调用原函数
return wrapper # 返回包装后的函数

@simple_decorator # @装饰器名
def say_hello():
print('hello')

say_hello()

'''
输出结果
正在执行额外行为!
hello
'''

列表推导式(列表解析式)

不仅对列表适用,除此以外还对字典集合同样适用。能够在列表字典集合中快速生成你需要的元素。
一般写法(Python)

1
2
3
4
squares = []
for x in range(5):
squares.append(x*x)
print(squares) # [0, 1, 4, 9, 16]

Python语法糖

1
2
squares = [x*x for x in range(5)]
print(squares) # [0, 1, 4, 9, 16]

打包解包

现有需求:获取元组内部的坐标值。
一般写法(Python)

1
2
3
4
5
6
7
8
9
#解压
xyz = (1,2,3)
x = xyz[0];y = xyz[1];z = xyz[2]
print(x,y,z) # 1 2 3

#打包
abc = tuple([x, y, z]) # 由于元组是无法修改元素的,将列表[x, y, z]强制转换成一个元组。
print(abc) # (1, 2, 3)

Python语法糖

1
2
3
4
5
6
7
8
#解压
xyz = (1,2,3)
x,y,z = xyz
print(x,y,z) # 1 2 3

#打包
abc = (x,y,z)
print(abc) # (1, 2, 3)

交换变量值

一般写法(Python),交互变量值的一般语法,需要一个额外变量存储值。

1
2
3
4
5
6
7
8
9
a = 1;b = 2
print(a,b)
c = a;a = b;b = c
print(a,b)
'''
输出结果
1 2
2 1
'''

Python语法糖

1
2
3
4
5
6
7
8
9
a = 1;b = 2
print(a,b)
a, b = b, a # python交换变量格式
print(a,b)
'''
输出结果
1 2
2 1
'''

字符串乘法

1
2
3
4
5
print('-'*50)
'''
输出结果
--------------------------------------------------
'''

列表切片

除了对列表进行切片操作外,还能对字符串元组字节串字节串数组numpy数组array.array等进行操作。

1
2
3
4
5
6
7
8
9
10
11
list = [i for i in range(1,11)]     # [1,2,3,4,5,6,7,8,9,10]
print(list[:]) # [1,2,3,4,5,6,7,8,9,10]
print(list[3:8]) # [4, 5, 6, 7, 8]
print(list[3:-2]) # [4, 5, 6, 7, 8]
print(list[:5]) # [1, 2, 3, 4, 5]
print(list[-5:]) # [6, 7, 8, 9, 10]
print(list[:-5]) # [1, 2, 3, 4, 5]
print(list[5:]) # [6, 7, 8, 9, 10]
print(list[1:8:2]) # [2, 4, 6, 8]
print(list[1:8:3]) # [2, 5, 8]
print(list[::-1]) # [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

数学分隔符

使用_分割数字,使得检查数字非常清晰。

1
2
3
# 表示1000000000
a = 10_0000_0000
print(a) # 1000000000

连续比较表达式

一般写法(Python)

1
2
3
4
5
6
7
8
9
a = 92
if a >= 90 and a <= 100: #条件式内容
print('excellent')
else:
print('other')
'''
输出结果
excellent
'''

python的语法糖

1
2
3
4
5
6
7
8
9
a = 92
if 90 <= a <= 100: #连续比较式
print('excellent')
else:
print('other')
'''
输出结果
excellent
'''

列表拼接

除了列表能拼接外,字典集合也能拼接。

1
2
3
4
list1  = [1,2,3]
list2 = [4,5,6,7,8]
list = list1 + list2
print(list) # [1, 2, 3, 4, 5, 6, 7, 8]

感谢您的支持 | Thank you for supporting

python常见高级语法结构 | Python common advanced syntax structure
http://example.com/2025/04/26/syntactic_sugars_in_Python/
作者
Eli Bi
发布于
2025年4月26日
更新于
2025年4月27日
许可协议