LOADING

如果你不会魔法 这可能会有些慢

Python语法糖

2025/12/16 Pyhon Python

img

圣诞到了!想要糖吗?来点Python语法糖!

语法糖是指一些小操作,使编程变得更简单和高效。

1. 切片

所有py初学者都会惊叹的py切片

>>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8 , 9]
>>> a[::-1] # 逆序
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

>>> b = "Beautiful is better than ugly."
>>> b[13:19] # 切片出13-19个字符
'better'

2. 推导式

非非非非非非非非非非非非常好用!

>>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8 , 9] # 传统的顺序序列赋值
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8 , 9]

>>>  b = [i for i in range(10)] # 用列表推导式的顺序序列复制
>>>  b
[0, 1, 2, 3, 4, 5, 6, 7, 8 , 9]

>>> c = [i for i in range(10) if i % 2 == 1] # 用判断推导式的顺序序列复制
>>> c
[1, 3, 5, 7, 9]

>>> dic = {i : chr(i + 65) for i in range(10)} # 用字典推导式的顺序序列复制
>>> dic
{0: 'A', 1: 'B', 2: 'C', 3: 'D', 4: 'E', 5: 'F', 6: 'G', 7: 'H', 8: 'I', 9: 'J'}

3. 链式比较

不用写很多and,但其实有些时候写了更明白

if 5 < x < 10: # 链式比较
    pass

if 1 < x < y < 10: # 多个参数比较
    pass

4. 上下文管理

离开with自动关闭文件

with open("a.txt", "r") as f1, \
     open("b.txt", "w") as f2:
    data = f1.read()
    f2.write(data.upper())

5. 装饰器

装饰器是学习Python绕不过去的坎

def decorator(func): # 装饰函数
    def wrapper():
        print("Before Function")
        func()
        print("After Function")
    return wrapper
    
@decorator
def hello():
    print("Hello!")

# 多个装饰器
@decorator1
@decorator2
def my_func():
    pass
# 等价于 my_func = decorator1(decorator2(my_func))

Before Function
Hello!
After Function

6. 格式化

f-string,只能说比printf好用太多了,也更优雅

print(f"Result: {3 + 4 * 2}")

print(f"Name: {'alice'.upper()}")

pi = 3.14159
print(f"Pi: {pi:.2f}")

print(f"|{'text':^10}|") # :<左对齐 :>右对齐 :^居中

7.参数解包

将序列或字典拆解为单独的参数

def sum_3(a, b, c):
    return a + b + c

args = [3, 5, 7]
print(sum_3(*args)) # = sum_3(4, 5, 7)

kwargs = {'a': 6, 'b': 8, 'c': 10}
print(sum_3(**kwargs)) # = sum_3(a=5, b=8, c=10)

15
24

8. 动态参数

解包的应用,可以输入任意数量的参数

def dynamic_args(*args, **kwargs): 
    print(args)
    print(kwargs)

dynamic_args(1,'2', True, name='alex', age=18)

l = [4,'8',False]
d = {'name': 'alice', 'age': '16'}
dynamic_args(*l, **d) # = dynamic_args(4,'8', False, name='alice', age=18)

(1, '2', True)
{'name': 'alex', 'age': 18}
(1, '2', False)
{'name': 'alice', 'age': '16'}

9, 下划线语法

增强可读性,同时用于忽略变量

num = 1_000_000  # 等价于 1000000
pi = 3.141_592_653_589_793

# 在循环中忽略变量
for _ in range(10):
    do_something()

# 解包时忽略不需要的值
data = (1, 2, 3, 4, 5)
first, _, third, _, fifth = data

10. Lambda

匿名函数,一种编写简洁的小型函数的方式

x = lambda a: a + 10
print(x(5)) # 输出: 15

# 通常与内置函数如 map()、filter() 和 reduce() 一起使用,以便在集合上执行操作
list = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x**2, list))
print(squared)  # 输出: [1, 4, 9, 16, 25]