15个Python 编码技巧,你会用吗?

360影视 2025-01-31 17:25 2

摘要:利用生成器对大型数据集进行迭代,而无需将所有内容加载到内存中。

提示:利用生成器对大型数据集进行迭代,而无需将所有内容加载到内存中。

优点:

高效处理大型数据集。即时生成项目,节省内存。

缺点:

生成器是一次性迭代器;一旦食用,它们就不能重复使用。

例:

# Fibonacci sequence generatordef fibonacci(n): a, b = 0, 1 for _ in range(n): yield a a, b = b, a + b

提示:在开发过程中使用断言来确认有关代码状态的假设。

优点:

通过及早发现潜在问题来增强代码可靠性。提供一种确认有关代码的假设的方法。

缺点:

在生产代码中过度使用可能会影响性能。

例:

# Assertion for checking if a variable is positivenum = -5assert num > 0, "number must be positive"

提示:了解处理可变对象和 shallow copy 处理可变对象之间的区别 deepcopy 。

优点:

Shallow copy :创建具有对相同对象的引用的新集合。Deepcopy :生成原始对象及其所有内容的独立克隆。

缺点:

在需要深拷贝时使用浅拷贝可能会导致对原始数据进行意外修改。

例:

# Duplicating a nested list with both shallow and deep copiesimport copyoriginal = [[1, 2, 3], [4, 5, 6]]shallow = copy.copy(original)deep = copy.deepcopy(original)

提示:采用该 random 模块,在代码中引入可变性或随机性。

优点:

适用于模拟、游戏或任何需要不可预测性的场景。提供多种随机化函数。

缺点:

结果不是真正随机的;它们是伪随机的。

例:

import random# Generating a random number between 1 and 10random_number = random.randint(1, 10)

提示: defaultdict 从 collections 模块中用于简化字典操作。

优点:

通过为不存在的键提供默认值来简化代码。消除显式密钥存在检查。

缺点:

需要导入 collections 模块。

例:

from collections import defaultdictword = "pythonic"letter_count = defaultdict(int)for letter in word: letter_count[letter] += 1

提示:使用 walrus 运算符 (python 3.8+) 进行表达式中的内联赋值。

优点:

有效地分配值并在同一表达式中使用它们。在某些情况下减少冗余。

缺点:

过度使用它会使不熟悉运算符的人更难阅读代码。

例:

# Reading lines from a file until a blank line is foundwith open('file.txt', 'r') as f: while (line := f.readline.strip): print(line)

提示:采用类型提示 (Python 3.5+) 以提高代码清晰度,尤其是在大型项目中。

优点:

提高了代码的可读性和可维护性。实现更好的 IDE 支持和静态类型检查。

缺点:

Python 仍然是一种动态类型的语言;类型提示是可选的,不是强制执行的 - 它是针对人眼;)。

例:

# Function with type hintsdef greet(name: str) -> str: return f"Hello, {name}!"

提示:使用 namedtuples 创建简单的、自记录的数据结构。

优点:

提供轻量级、不可变的数据结构。通过为每个字段指定名称来增强代码可读性。

缺点:

变;创建后无法修改。对于可变结构,请考虑使用数据类 (Python 3.7+)。

例:

# Creating a namedtuple for a personfrom collections import namedtuplePerson = namedtuple('Person', ['name', 'age'])alice = Person(name="Alice", age=30)

提示:用于 zip 组合多个可迭代对象,从而更轻松地并行循环访问多个列表。

优点:

简化同时迭代多个列表的过程。对于需要一起处理不同列表中的项目的任务很方便。

缺点:

zip 停在最短的输入列表中;对于不同大小的可迭代对象,请考虑使用 itertools.zip_longest 。

例:

# Matching user inputs with corresponding answers in a quiznames = ["Alice", "Bob"]scores = [85, 92]for name, score in zip(names, scores): print(f"{name}: {score}")10. 字典 —get和setdefault:优雅的按键处理

提示:使用 get 和 setdefault 方法增强字典操作。

优点:

get :检索键的值,如果键不存在,则提供默认值。setdefault :如果密钥不存在,则设置默认值,防止重复密钥检查。

缺点:

忽略这些方法可能会导致检查密钥是否存在的冗余代码。

例:

data = {"name": "Alice"}age = data.get("age", 30)data.setdefault("country", "USA")

提示:直接运行脚本时, if __name__ == "__main__": 使用 guard 来控制代码执行。

优点:

确保某些代码仅在直接执行脚本时运行,而不是在导入脚本时运行。对于既可以为函数导入,也可以直接为任务运行的实用程序脚本很有用。

缺点:

在导入模块时,忘记使用此防护可能会导致意外行为。

例:

if __name__ == "__main__": print("This script is being run directly!")

提示:利用虚拟环境来隔离特定于项目的依赖项,防止与系统范围的包发生冲突。

优点:

确保每个项目都有一个干净和隔离的环境。促进依赖关系的管理并避免冲突。

缺点:

忘记激活虚拟环境可能会导致在全局 Python 环境中意外安装包。

例:

# Creating and activating a virtual environmentpython -m venv my_project_envsource my_project_env/bin/activate

优点:

有效地将集合解压缩到单独的元素中。促进函数中的动态参数处理。

缺点:

过度使用会降低代码的可读性,尤其是在连续多次解包时。

例:

# Passing a dynamic list of values to a function expecting separate argumentsdef func(a, b, c): return a + b + cvalues = [1, 2, 3]print(func(*values))14. Context Managers(with语句):资源管理简单性

提示:将上下文管理器与 with 语句一起使用,以实现高效的资源管理。

优点:

确保资源的正确设置和拆卸。提高代码可读性并降低资源泄漏的可能性。

缺点:

忘记在有益时使用该 with 语句可能会导致与资源相关的问题。

例:

# Opening and reading a file using a context managerwith open('file.txt', 'r') as f: content = f.read15. Python 的下划线 (_) 用途:命名和循环的多功能性

提示:利用下划线 ( _ ) 作为循环中的一次性变量。

优点:

在命名约定中表示“受保护”的变量。在 REPL 环境中重用上一个结果。当不需要循环变量时,充当循环中的一次性变量。

缺点:

不同的用途可能会令人困惑,尤其是对于新编码人员而言。

例:

# Iterating a specific number of times without needing the loop counterfor _ in range(5): print("Hello, World!")

提示: 合并 map 、 filter 和 reduce 作为处理集合的函数式方法,从而减少对显式循环的需求。

优点:

map :将函数应用于集合中的每个项。filter :根据谓词选择项目。reduce :累积应用函数,将序列减少为单个值。

缺点:

请注意,在 Python 3.x 中,map 和 filter 返回迭代器;如果需要,将它们转换为列表。

例:

# Using map to convert strings to uppercasenames = ["alice", "bob", "charlie"]upper_names = list(map(str.upper, names))

提示:使用 update 方法或 {**dict1, **dict2} 语法来合并词典。

优点:

简化了多个词典内容的组合。在选择合并方法时提供灵活性。在处理嵌套字典时,过度使用此方法可能会导致意外结果。

例:

# Merging dictionaries using the update methoddict1 = {'a': 1, 'b': 2}dict2 = {'b': 3, 'c': 4}dict1.update(dict2)

来源:自由坦荡的湖泊AI

相关推荐