前言
Python 中的语法糖是指一些特殊的语法结构,它们并没有引入新的功能,但能够使代码更加简洁易读。下面是一些常用的 Python 语法糖示例,花一点时间学完,你就能撸一手优雅的代码。
正文
下划线分割数字,使用下划线来分隔数字可以使得数字更加清晰易读
1 2 3 4
| a = 1000000000 b = 10_0000_0000 c = 10_5555_5555 print(a, b, c)
|
交换值,使用两个变量来交换值,可以使用位运算符 ^
来避免创建临时变量
范围比较:在 if
语句中使用范围比较可以直接进行条件判断,而不需要进行拆分
字符串乘法:使用 *
符号可以将字符串重复指定次数
数组合并:使用 +
符号可以将两个列表合并成一个新的列表
1 2 3
| a = [1, 2, 3] b = [4, 5] print(a + b)
|
数组切片:使用 []
符号来访问列表中的元素,可以指定切片范围
1 2 3 4 5
| a = [1, 2, 3, 4, 5, 6, 7] print(a[3: -1]) print(a[-1]) print(a[:3]) print(a[-3:])
|
打包解包:使用 *
和 ,
符号来打包和解包多个变量值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| a = (10, 'hello', True) print(type(a))
b = [20, 'world'] c = (*b, a[0], *a[1]) print(c)
d = {'x': 30} f = {**d, **{'y': 40}} print(f)
g = ('apple', 'banana') h, i = g print(h, i)
j = ['cat', 'dog', 'bird'] k, l, m = j print(k, l, m)
n = {'name': 'John', 'age': 25} p, q = n.items() print(p, q)
|
with 语句:with
语句可以自动管理资源的打开和关闭,无需手动调用 close()
方法
1 2 3 4
|
with open('test.txt', 'r') as f: data = f.read()
|
with 语句的扩展:自定义上下文管理器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| class MyNewClass(object): def __enter__(self): print("Before exect my_function.") return self
def __exit__(self, *args): print("After exect my_function.")
def my_function(self): print("Exect my_function.")
with MyNewClass() as new_class: new_class.my_function()
|
with 语句的扩展:偷懒版上下文管理器
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| from contextlib import contextmanager
@contextmanager def test_new_contextmanager(): print("Before exect my_function.") yield print("Exect my_function.")
with test_new_contextmanager() as new_contextmanager: print("After exect my_function.")
|
列表推导式:快速创建一个新的列表
1 2 3
| numbers = [1, 2, 3, 4, 5] squares = [x**2 for x in numbers] print(squares)
|
条件表达式:类似于java
的三元表达式
1 2 3
| x = 10 even_odd = "even" if x % 2 == 0 else "odd" print(even_odd)
|
解构赋值:一次性给多个变量赋值,无需使用中间变量
1 2 3 4
| x, y = 10, 20
def get_name(): return "John", "Doe"
|
装饰器:类似于java
的切面编程
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| def decorator(func): def wrapper(): print("Before function call") func() print("After function call") return wrapper
@decorator def hello(): print("Hello, world!")
hello()
|
内置的 enumerate() 函数:更加便捷的迭代
1 2 3 4 5 6 7
| names = ["Alice", "Bob", "Charlie"] for index, name in enumerate(names): print(index, name)
|
内置的 zip() 函数:同时迭代多个列表
1 2 3 4 5 6 7 8
| names = ["Alice", "Bob", "Charlie"] ages = [25, 30, 35] for name, age in zip(names, ages): print(name, age)
|
any() 和 all() 函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| list_1 = [0, 0, 0, 1, 0, 0, 0, 0] print(any(list_1))
list_2 = [False, False, False] print(any(list_2))
list_3 = [1, 1, 1, 1, 0, 1, 1, 1] print(all(list_3))
list_4 = [True, True, True] print(any(list_4))
|
|
合并字典:版本3.9+
,只针对 dict
1 2 3 4 5 6 7
| a={'a':1} b={'b':2} c={'c':3} d=a|b|c
print(d)
|
类,函数空实现:除了用pass
之外,还可以用...
1 2 3 4
| def my_function(): ... class Person: ...
|
lambda 表达式
1 2 3 4 5
| lam_list = ['Java', 'C++', 'Python', 'Golang', 'PHP'] lam_list.sort(key=lambda x: len(x)) print(lam_list)
|
总结
持续更新