云计算、AI、云原生、大数据等一站式技术学习平台

网站首页 > 教程文章 正文

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

jxf315 2025-02-17 12:36:27 教程文章 23 ℃

1. 生成器:内存高效迭代

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

优点:

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

缺点:

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

例:

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

2. 断言:自信地调试

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

优点:

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

缺点:

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

例:

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

3. 深拷贝与浅拷贝:明智地复制

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

优点:

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

缺点:

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

例:

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

4. 随机模块:拥抱不可预测性

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

优点:

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

缺点:

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

例:

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

5. Defaultdict:简化字典操作

提示: defaultdictcollections 模块中用于简化字典操作。

优点:

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

缺点:

  • 需要导入 collections 模块。

例:

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

6. 海象运算符 (:=):效率的内联分配

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

优点:

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

缺点:

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

例:

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

7. 类型提示:增强代码清晰度

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

优点:

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

缺点:

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

例:

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

8. 命名元组:自记录数据结构

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

优点:

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

缺点:

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

例:

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

9. 压缩和解压缩列表:合并和解压缩序列

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

优点:

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

缺点:

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

例:

# Matching user inputs with corresponding answers in a quiz
names = ["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")

11. 守卫__main__:脚本执行控制

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

优点:

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

缺点:

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

例:

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

12. 虚拟环境:隔离项目特定开发的依赖关系

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

优点:

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

缺点:

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

例:

# Creating and activating a virtual environment
python -m venv my_project_env
source my_project_env/bin/activate

13. 星号 (*) 运算符:多才多艺且功能强大

提示:探索星号 ( * ) 运算符在打包和解包、关键字参数解包和重复方面的多功能性。

优点:

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

缺点:

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

例:

# Passing a dynamic list of values to a function expecting separate arguments
def func(a, b, c):
    return a + b + c
values = [1, 2, 3]
print(func(*values))

14. Context Managers(with语句):资源管理简单性

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

优点:

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

缺点:

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

例:

# Opening and reading a file using a context manager
with open('file.txt', 'r') as f:
    content = f.read()

15. Python 的下划线 (_) 用途:命名和循环的多功能性

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

优点:

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

缺点:

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

例:

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

16. 映射、过滤和缩减:Python 中的函数式编程

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

优点:

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

缺点:

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

例:

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

17. 合并词典:简化词典操作

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

优点:

  • 简化了多个词典内容的组合。
  • 在选择合并方法时提供灵活性。

缺点:

  • 在处理嵌套字典时,过度使用此方法可能会导致意外结果。

例:

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

Tags:

最近发表
标签列表