探索鲜为人知的Python特性,让你成为编程高手

发表时间: 2024-06-02 11:14

1.collections.defaultdict用于简化字典操作

defaultdict from 模块 collections 允许创建具有默认值的字典,从而避免关键错误并使您的代码更简洁。

from collections import defaultdict# Without defaultdictword_count = {}for word in words:    if word in word_count:        word_count[word] += 1    else:        word_count[word] = 1# With defaultdictword_count = defaultdict(int)for word in words:    word_count[word] += 1print(word_count)
{'apple': 3, 'banana': 2, 'orange': 1}defaultdict(<class 'int'>, {'apple': 3, 'banana': 2, 'orange': 1})

2. 用于pathlib路径操作

pathlib 模块提供了一种面向对象的方法来处理文件系统路径,使代码更直观、更易于阅读。

from pathlib import Path# Creating a Path objectp = Path('/usr/bin')# Check if path existsprint(p.exists())# Iterate over directoryfor child in p.iterdir():    print(child)# Joining pathsq = p / 'local' / 'bin'print(q)
True/usr/bin/python/usr/bin/pip/usr/local/bin

3. 用于enumerate索引跟踪

enumerate 是一个内置函数,允许遍历可迭代对象并具有自动计数器,从而简化循环。

# Without enumeratei = 0for element in iterable:    print(i, element)    i += 1# With enumeratefor i, element in enumerate(iterable):    print(i, element)
0 apple1 banana2 orange0 apple1 banana2 orange

4. 用于zip并行迭代

zip 允许并行迭代多个可迭代对象,创建相应元素的元组,既高效又可读。

names = ['Alice', 'Bob', 'Charlie']scores = [85, 90, 95]# Without zipfor i in range(len(names)):    print(names[i], scores[i])# With zipfor name, score in zip(names, scores):    print(name, score)
Alice 85Bob 90Charlie 95Alice 85Bob 90Charlie 95

5.itertools用于高级迭代

itertools 模块包含各种函数,可用于创建复杂的迭代模式,使代码更加强大和灵活。

import itertools# Infinite countingfor i in itertools.count(10, 2):    if i > 20:        break    print(i)# Cartesian productfor item in itertools.product([1, 2], ['a', 'b']):    print(item)
101214161820(1, 'a')(1, 'b')(2, 'a')(2, 'b')

6. 使用with语句进行资源管理

with 语句简化了异常处理,并确保资源得到正确管理,这对于编写可靠的代码至关重要。

# Without withfile = open('example.txt', 'r')try:    data = file.read()finally:    file.close()# With withwith open('example.txt', 'r') as file:    data = file.read()

7. 用于namedtuple轻量级数据结构

namedtuplecollections 模块提供了一种创建轻量级、不可变数据结构的简单方法,可以使您的代码更简洁、更自记录。

from collections import namedtuple# Define a namedtuplePoint = namedtuple('Point', ['x', 'y'])# Create an instancep = Point(10, 20)print(p.x, p.y)
10 20

8. 使用列表推导进行简洁代码

列表推导式提供了一种创建列表的简洁方法,使代码更具可读性,并且通常更快。

# Without list comprehensionsquares = []for x in range(10):    squares.append(x**2)# With list comprehensionsquares = [x**2 for x in range(10)]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

9. 用于functools.lru_cache记忆

functools.lru_cache 可用于缓存成本高昂的函数调用的结果,从而显著提高具有重复计算密集型操作的函数的性能。

# Without list comprehensionsquares = []for x in range(10):    squares.append(x**2)# With list comprehensionsquares = [x**2 for x in range(10)]
12586269025

10. 用作_一次性变量

在循环或解包中, _ 通常在不需要值时用作一次性变量,使代码更清晰,并指示有意忽略该变量。

# Loop with throwaway variablefor _ in range(5):    print("Hello, World!")# Unpacking with throwaway variablea, _, b = (1, 2, 3)print(a, b)
Hello, World!Hello, World!Hello, World!Hello, World!Hello, World!1 3