上下文管理器语法(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))
|
Python语法糖
1 2
| add = lambda x, y, z: x + y + z print(add(1, 1, 1))
|
进阶写法(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))
|
装饰器(函数装饰器或类装饰器)
装饰器本质是一个 函数,接收一个函数作为参数,并返回一个新的函数。其特点是:给函数/类添加额外行为,不改变原函数代码,不改变函数的调用方式。常见应用场景有:
场景 |
举例说明 |
日志记录 |
@log 打印函数调用情况 |
计时器 |
@timer 记录函数运行耗时 |
权限验证 |
@auth_required 限制未登录用户 |
缓存 |
@lru_cache 加快函数调用效率 |
Django/Flask Web 路由 |
@app.route(“/index”) |
函数装饰器
- 以函数为例,这是一个普通函数,无装饰器
1 2 3 4 5 6 7
| def say_hello(): print('hello') say_hello() ''' 输出结果 hello '''
|
- 这是一个普通函数,有装饰器(函数返回函数)
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()
''' 输出结果 正在执行额外行为! hello '''
|
- 使用
@装饰器名
来自动装饰(装饰器最佳用法),@装饰器名
放在函数定义上方
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)
|
Python语法糖
1 2
| squares = [x*x for x in range(5)] print(squares)
|
打包解包
现有需求:获取元组内部的坐标值。
一般写法(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)
abc = tuple([x, y, z]) print(abc)
|
Python语法糖
1 2 3 4 5 6 7 8
| xyz = (1,2,3) x,y,z = xyz print(x,y,z)
abc = (x,y,z) print(abc)
|
交换变量值
一般写法(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 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)] print(list[:]) print(list[3:8]) print(list[3:-2]) print(list[:5]) print(list[-5:]) print(list[:-5]) print(list[5:]) print(list[1:8:2]) print(list[1:8:3]) print(list[::-1])
|
数学分隔符
使用_
分割数字,使得检查数字非常清晰。
1 2 3
| a = 10_0000_0000 print(a)
|
连续比较表达式
一般写法(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)
|