Python 是一种非常灵活且功能强大的编程语言,它有许多不为人知但非常有用的用法。以下是一些小众但好用的 Python 用法:
- 列表推导式:用于创建列表的简洁方式。
squares = [x**2 for x in range(10)]
结果:[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
- 生成器表达式:与列表推导式类似,但用于创建生成器,节省内存。
squares = (x**2 for x in range(10))
结果:<generator object at 0x…>(这是一个生成器对象)
- 字典推导式:用于创建字典的快捷方式。
squares = {x: x**2 for x in range(10)}
结果:{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}
- 集合推导式:用于创建集合的快捷方式。
unique_numbers = {x for x in range(100) if x % 5 == 0}
结果:{0, 5, 10, 15, 20, …, 95}(包含0到99之间所有5的倍数)
- 切片赋值:可以一次性赋值给列表的多个元素。
a = [0, 1, 2, 3, 4]
a[1:3] = [10, 20]
结果:[0, 10, 20, 3, 4]
- 解包赋值:可以一次性将多个变量解包赋值。
a, b, *rest = [1, 2, 3, 4, 5]
结果:a = 1, b = 2, rest = [3, 4, 5]
- 星号表达式:在函数调用中收集额外的参数。
def func(*args, **kwargs):
pass
结果:定义了一个可以接受任意数量位置参数和关键字参数的函数。
-
with语句:用于管理资源,确保资源被适当地释放。
with open(‘file.txt’, ‘r’) as f:
data = f.read() -
上下文管理器:通过定义__enter__和__exit__方法,自定义资源管理。
class ManagedResource:
def enter(self):
return self
def exit(self, exc_type, exc_value, traceback):
print(“Resource cleaned up”)
结果:定义了一个可以用于with语句的资源管理类。
-
装饰器:用于修改函数或方法的行为。
def my_decorator(func):
def wrapper(*args, **kwargs):
print(“Something is happening before the function is called.”)
result = func(*args, **kwargs)
print(“Something is happening after the function is called.”)
return result
return wrapper -
单下划线和双下划线:用于命名约定,如__variable表示私有变量,__private_variable表示名称重整。
__variable = “I’m private”
结果:定义了一个名为__variable的私有变量。
- 推导式链:可以链式使用推导式。
result = [(x + y) for x in range(3) for y in range(3)]
结果:[0, 1, 2, 1, 2, 3, 2, 3, 4]
- 内置函数map():对序列的每个元素应用函数。
squares = list(map(lambda x: x**2, range(10)))
结果:[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
- 内置函数filter():过滤序列,过滤掉不符合条件的元素。
evens = list(filter(lambda x: x % 2 == 0, range(10)))
结果:[0, 2, 4, 6, 8]
- itertools模块:提供了许多用于操作迭代器的函数。
import itertools
product = list(itertools.product([1, 2, 3], repeat=2))
结果:[(1, 1), (1, 2), (1, 3), (2, 1), (2, 2), (2, 3), (3, 1), (3, 2), (3, 3)]
- functools.reduce():对序列的元素进行累积操作。
from functools import reduce
result = reduce(lambda x, y: x+y, [1, 2, 3, 4, 5])
结果:15
- any()和all():用于检查序列中是否有任何或所有元素满足条件。
any([False, False, True])
all([True, True, True])
结果:True, True
- enumerate():用于在循环中获取元素及其索引。
for index, value in enumerate([‘a’, ‘b’, ‘c’]):
print(index, value)
结果:
0 a
1 b
2 c
-
sorted():用于排序,可以自定义排序键。
sorted(iterable, key=lambda x: x[1]) -
argparse模块:用于编写用户友好的命令行接口。
import argparse
parser = argparse.ArgumentParser(description=“Example”)
parser.add_argument(‘integers’, metavar=‘N’, type=int, nargs=’+’,
help=‘an integer for the accumulator’)