摘要:word_counts = {}words = ["apple", "banana", "apple", "orange", "banana", "banana"]for word in words: if word not in word_counts: w
你是否曾经编写过一个循环,检查字典中是否存在键,然后再向其中添加值?而不是这样写:
word_counts = {}words = ["apple", "banana", "apple", "orange", "banana", "banana"]for word in words: if word not in word_counts: word_counts[word] = 0 word_counts[word] += 1你可以使用 collections.defaultdict 来简化这个操作:
from collections import defaultdictword_counts = defaultdict(int)words = ["apple", "banana", "apple", "orange", "banana", "banana"]for word in words: word_counts[word] += 1日志聚合: 轻松统计系统日志中日志级别的出现次数。数据分组: 在不手动初始化列表的情况下,将项目列表存储在键下。动态对象创建: 在解析 JSON 时自动填充嵌套字典。2. 一行代码的禅意:超越基础的列表推导式
Python 的列表推导式功能强大,但它们不仅仅可以用来创建列表。看看这个:
nested = [[1, 2, 3], [4, 5], [6, 7, 8]]flattened = [num for sublist in nested for num in sublist]print(flattened) # [1, 2, 3, 4, 5, 6, 7, 8]words = ["hello", "world", "Python", "is", "awesome"]capitalized_long_words = [word.upper for word in words if len(word) > 5]print(capitalized_long_words) # ['PYTHON', 'AWESOME']@dataclass 装饰器通常用于简单的数据存储,但你是否知道它还可以简化 API 设计?比较以下传统类:
class User: def __init__(self, name, age): self.name = name self.age = ageuser = User("Alice", 30)与一个 dataclass:
from dataclasses import dataclass@dataclassclass User: name: str age: intuser = User("Alice", 30)自动生成方法数据类自动提供 __init__、__repr__ 以及比较方法,因此可以立即使用:
user1 = User("Alice", 30)user2 = User("Alice", 30)print(user1 == user2) # True为什么这很强大你可能已经使用过 with open 来处理文件,但你是否知道你可以创建自己的上下文管理器?它们可以用来管理数据库连接、时间执行等!
import timefrom contextlib import contextmanager@contextmanagerdef timer: start = time.time yield end = time.time print(f"Execution time: {end - start:.4f} seconds")with timer: time.sleep(1)双下划线(dunder)方法让您定义对象的行为。以下是三个必须了解的方法:
class MyList: def __init__(self, items): self.items = items def __getitem__(self, index): return self.items[index]my_list = MyList([1, 2, 3])print(my_list[1]) # 2class Greeter: def __call__(self, name): return f"Hello, {name}!"greet = Greeterprint(greet("Alice")) # Hello, Alice!如果您的类具有固定属性集,__slots__ 可以节省内存:
class User: __slots__ = ["name", "age"] def __init__(self, name, age): self.name = name self.age = age这些 Python 技巧一开始可能看起来像是魔法,但它们只是编写更好代码的聪明方法。无论您是在简化字典使用 defaultdict,创建自定义的 with 语句,还是使用 dataclass 来减少样板代码,这些技术都会使您成为一个更高效的 Python 程序员。
来源:自由坦荡的湖泊AI一点号