Python编程技巧总结(二),赶紧码起来!

科技   科技   2024-09-07 18:00   河北  

      你好,我是李逸皓,我的梦想是:运维,永不背锅!

放个链接,万一有人关注呢

优质文章推荐

↓ ↓ ↓ ↓ 

开启Linux新时代

轻量级Linux操作系统

又一款Linux发行版,Kali Linux迎来劲敌

Ubuntu重大变化,运维人两眼一黑

Windows最强cmd命令总结



1. 使用虚拟环境和管理依赖

使用虚拟环境隔离项目依赖,确保不同项目之间的依赖不会互相冲突。

- 工具推荐:

- venv:Python 内置的虚拟环境管理工具。

- virtualenv:更灵活的虚拟环境管理工具。

- pipenv、poetry:集成依赖管理和虚拟环境的工具。

示例:

# 使用 venv 创建虚拟环境python -m venv myenv# 激活虚拟环境# Windowsmyenv\Scripts\activate# macOS/Linuxsource myenv/bin/activate# 安装依赖pip install requests

2. 编写测试代码

编写测试代码可以确保你的代码在修改后仍然按预期工作,提高代码的可靠性。

- 单元测试:测试代码的最小可测试单元,如函数和方法。使用 `unittest` 或 `pytest` 等框架。

- 集成测试:测试多个模块或组件之间的交互。

- 测试覆盖率:确保关键代码路径被测试覆盖。

示例(使用 `unittest`):

import unittestfrom my_module import add_numbersclass TestAddNumbers(unittest.TestCase):def test_add_positive_numbers(self):self.assertEqual(add_numbers(2, 3), 5)def test_add_negative_numbers(self):self.assertEqual(add_numbers(-2, -3), -5)if __name__ == '__main__':unittest.main()


3. 使用类型提示和注解

类型提示能够提高代码的可读性,并帮助工具进行静态分析,减少潜在的错误。

- 基本类型提示:如 `int`, `str`, `List[int]` 等。

- 自定义类型:使用 `typing` 模块中的 `TypeVar`, `Generic` 等进行复杂类型提示。

- 静态类型检查工具:如 `mypy`,可以根据类型提示检查代码中的类型错误。

示例:

from typing import Listdef greet(name: str) -> str:return f"Hello, {name}!"def sum_numbers(numbers: List[int]) -> int:return sum(numbers)


4. 理解 Python 的作用域和命名空间

理解变量的作用域和命名空间可以避免命名冲突和意外的变量覆盖。

- LEGB 原则:Local, Enclosed, Global, Built-in。

- 局部变量:在函数或方法内部定义的变量,仅在该作用域内可见。

- 全局变量:在模块级别定义的变量,在整个模块内可见。

- 内置变量:Python 内置的名称,如 `len`, `print`。

示例:

x = 10 # 全局变量def foo():x = 5 # 局部变量print(x) # 输出 5foo()print(x) # 输出 10

5. 使用上下文管理器(with 语句)

上下文管理器能够确保资源(如文件、网络连接)的正确管理和释放,避免资源泄漏。

- 文件操作:使用 `with open(...)` 自动管理文件关闭。

- 自定义上下文管理器**:通过实现 `__enter__` 和 `__exit__` 方法。

示例:

# 使用上下文管理器打开文件with open('data.txt', 'r') as file:data = file.read()# 自定义上下文管理器class MyContext:def __enter__(self):print("进入上下文")return selfdef __exit__(self, exc_type, exc_value, traceback):print("退出上下文")with MyContext():print("在上下文中运行")


6. 保持 Python 版本和特性的更新

跟进 Python 的最新版本和新特性,能够提高代码的性能和安全性,并利用最新的语言功能简化代码。

- 查看 Python 的 [发行说明]。

- 学习新特性:如 f-strings(Python 3.6+)、异步编程(async/await)、类型提示(Python 3.5+)等。

- 升级依赖库,确保兼容性和安全性。


 7. 注意可变类型与不可变类型

理解可变类型(如列表、字典)和不可变类型(如元组、字符串)的区别,避免在函数中不小心修改参数。

- 不可变类型:修改会创建新对象。

- 可变类型:可以直接修改对象内容。

示例:

def append_to_list(lst=None):if lst is None:lst = []lst.append(1)return lst# 避免使用可变类型作为默认参数


8. 优化导入语句

合理组织导入语句,遵循导入顺序和避免不必要的导入,以提高代码的可读性和性能。

- 导入顺序:标准库、第三方库、本地库,每类之间用空行分隔。

- 避免使用通配符导入(如 `from module import *`),这会污染命名空间。

- 按需导入,减少不必要的模块加载。

示例:

# 推荐的导入顺序import osimport sysimport requestsfrom my_module import my_function


9. 利用迭代器和生成器

使用迭代器和生成器可以高效地处理数据流,尤其是在处理大型数据集时,能够节省内存。

- 生成器:使用 `yield` 关键字创建生成器函数。

- 生成器表达式:类似于列表推导,但使用圆括号。

示例:

# 生成器函数def fibonacci(n):a, b = 0, 1for _ in range(n):yield aa, b = b, a + bfor num in fibonacci(10):print(num)# 生成器表达式squares = (x**2 for x in range(10))for square in squares:print(square)


10. 避免常见的陷阱和反模式

了解并避免 Python 编程中的常见陷阱和反模式,可以提高代码质量和避免潜在的错误。

- 避免使用可变对象作为默认参数,如函数参数中的列表或字典。

- 不要在循环中修改正在迭代的列表,这可能导致意外的行为。

- 避免过度嵌套的代码,保持代码的简洁和可读性。

- 避免使用过多的全局变量,这会增加代码的复杂性和维护难度。

示例:

# 反模式:使用可变对象作为默认参数def add_item(item, items=[]):items.append(item)return itemsprint(add_item(1)) # 输出 [1]print(add_item(2)) # 输出 [1, 2],不符合预期# 推荐def add_item(item, items=None):if items is None:items = []items.append(item)return items

粉丝进群方式如下图:

欢迎新的小伙伴加入!在这里,我们鼓励大家积极参与群内讨论和交流,分享自己的见解和经验,一起学习和成长。同时,也欢迎大家提出问题和建议,让我们不断改进和完善这个平台。

   点个在看,无需赞赏!

运维book思议
李小白,一个北漂的运维。希望能够通过本公众号与业内各位大神交流技术问题。
 最新文章