探索鲜为人知的Python特性,让你成为编程高手
发表时间: 2024-06-02 11:14
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})
该 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
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
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
该 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')
该 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()
namedtuple 该 collections 模块提供了一种创建轻量级、不可变数据结构的简单方法,可以使您的代码更简洁、更自记录。
from collections import namedtuple# Define a namedtuplePoint = namedtuple('Point', ['x', 'y'])# Create an instancep = Point(10, 20)print(p.x, p.y)
10 20
列表推导式提供了一种创建列表的简洁方法,使代码更具可读性,并且通常更快。
# 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]
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
在循环或解包中, _ 通常在不需要值时用作一次性变量,使代码更清晰,并指示有意忽略该变量。
# 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