首页
开发技巧正文内容

25 个 Python 开发者可能不知道但应该开始使用的小技巧

2024年11月02日
阅读时长 3 分钟
阅读量 3
25 个 Python 开发者可能不知道但应该开始使用的小技巧

这些实用的 Python 技巧不仅能让你的代码更简洁优雅,还能有效提升效率。即使你已经熟悉 Python,这些“隐藏”功能也可能会带给你惊喜。

1. 使用 any()all() 进行快速条件检查

快速检查条件是否满足,而无需复杂的 if 语句:

data = [0, 1, 2, 3]
if any(data):
    print("至少有一个真值!")
if all(data):
    print("所有值都是真值!")

2. 用 f"{=}" 来快速打印变量

在 Python 3.8+ 中,可以更简单地打印变量名和值:

name = "Python"
print(f"{name=}")  # 输出:name='Python'

3. 上下文管理器超越 with open()

使用上下文管理器轻松创建计时器或锁定资源:

import time
from contextlib import contextmanager

@contextmanager
def timer():
    start = time.time()
    yield
    end = time.time()
    print(f"经过时间:{end - start:.2f}秒")

with timer():
    sum([x**2 for x in range(10000)])

4. 使用 namedtuple 创建简单的数据结构

当类太复杂而字典不够时,namedtuple 是个好选择:

from collections import namedtuple

Car = namedtuple('Car', ['make', 'model', 'year'])
my_car = Car(make='Tesla', model='Model S', year=2022)
print(my_car.make)  # 输出:Tesla

5. 动态替换函数

随时更改函数的行为,特别适合临时调整功能:

def greet():
    print("Hello!")

greet()
greet = lambda: print("Bonjour!")
greet()

6. 用 _ 忽略无用数据

下划线 _ 表示不需要的数据项:

_, filename = "/path/to/file.txt".rsplit("/", 1)
print(filename)  # 输出:file.txt

7. 循环中的 else

forwhile 循环可以带 else,仅在循环未被打断时执行:

for num in range(5):
    if num == 3:
        break
else:
    print("完成而没有中断!")

8. 用 .get() 处理字典键

减少使用 try-except 获取字典键的麻烦:

data = {'name': 'Python'}
print(data.get('age', '未找到'))  # 输出:未找到

9. 快速搭建 HTTP 服务器

只需一行命令即可开启本地文件服务器:

python -m http.server 8080

10. 缺少库时自动安装

自动安装缺失的库,减少中断:

import subprocess
try:
    import requests
except ImportError:
    subprocess.run(["pip", "install", "requests"])

11. 漂亮打印 JSON

打印整齐的 JSON 数据以便阅读:

import json

data = {'name': 'Python', 'age': 30}
print(json.dumps(data, indent=4))

12. 确保脚本在虚拟环境中运行

确保脚本在虚拟环境中运行:

import sys
if not hasattr(sys, 'real_prefix'):
    raise EnvironmentError("请激活虚拟环境!")

13. 缓存函数结果

lru_cache 缓存重复计算结果:

from functools import lru_cache

@lru_cache
def expensive_function(x):
    print("运行中...")
    return x * 2

print(expensive_function(10))  # 运行
print(expensive_function(10))  # 已缓存

14. 一行代码检测回文

轻松检查字符串是否为回文:

is_palindrome = lambda s: s == s[::-1]
print(is_palindrome('racecar'))  # True

15. 使用 dataclass 减少样板代码

dataclass 装饰器简化类定义:

from dataclasses import dataclass

@dataclass
class Book:
    title: str
    author: str·

b = Book("Python Tricks", "Dan Bader")
print(b)

16. tempfile 处理临时文件

无需手动清理临时文件,使用 tempfile

import tempfile

with tempfile.TemporaryFile() as temp:
    temp.write(b'一些数据')

17. Monkey Patching 动态修改行为

在不修改源代码的情况下更改模块的行为:

import random
random.randint = lambda a, b: 42  # 始终返回 42
print(random.randint(1, 100))  # 输出:42

18. 使用 match-case 简化条件逻辑

Python 3.10+ 引入了 match-case 语法用于多分支判断:

command = 'start'
match command:
    case 'start':
        print("启动中...")
    case 'stop':
        print("停止中...")

19. 用 Lock 保护线程资源

Lock 来防止多线程资源冲突:

from threading import Lock

lock = Lock()
with lock:
    print("线程安全区域")

20. 使用 zip() 遍历多个列表

同时遍历多个列表而无需嵌套循环:

names = ['Alice', 'Bob']
ages = [24, 27]
for name, age in zip(names, ages):
    print(f"{name} 今年 {age} 岁。")

21. 快速交换变量

交换两个变量时无需临时变量:

a, b = 5, 10
a, b = b, a
print(a, b)  # 输出:10, 5

22. 使用 enum 创建清晰的常量

定义清晰的常量而非使用“神奇数字”:

from enum import Enum

class Status(Enum):
    PENDING = 1
    APPROVED = 2
    REJECTED = 3

23. 快速获取明天的日期

无需复杂计算获取下一天日期:

from datetime import datetime, timedelta

print(datetime.now() + timedelta(days=1))

24. 使用 cProfile 分析代码

找出代码瓶颈,优化性能:

python -m cProfile your_script.py

25. 用 memory_profiler 检查内存使用

找出内存消耗大的部分:

pip install memory-profiler
mprof run your_script.py

这些技巧可以帮助你高效编码,提升 Python 编程的专业性!

免责声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

相关文章

探索多种软件架构模式及其实用应用
2024年11月22日19:06
本文深入探讨了多种软件架构模式,包括有界上下文、边车模式、发布-订阅模式、应用网关、微服务、命令职责分离(CQRS)等,介绍了它们的优点、使用场景以及具体应用实例。文章强调根据具体项目需求和团队能力选择最合适的架构,以构建高效和可维护的解决方案,同时展示了各架构模式间的综合应用,提供了丰富的案例和技术细节。
15个高级Python快捷键助您更快编程
2024年11月21日07:02
本文分享了 15 个高级的 Python 编程快捷键,包括上下文管理器、行内字典合并、函数参数解包、链式比较、dataclasses、海象运算符、反转列表、备忘录缓存、splitlines、enumerate、字典推导、zip 用于并行迭代、itertools.chain 扁平化列表、functools.partial 部分函数和 os.path 文件路径管理等,帮助开发者提高编程效率和代码简洁性。
揭示网页开发的 11 个迷思:停止相信这些误区
2024年11月19日22:05
网页开发充满误解,这篇博文针对11个常见迷思进行揭秘。包括网站开发后不需更新、需掌握所有技术、AI会取代开发者等。强调持续学习、专业化、用户体验的重要性,澄清误区如多任务处理的必要性和最新技术的必需性。文章提醒开发者注重实用而非追求完美代码,以务实态度面对开发工作。
你知道 CSS 的四种 Focus 样式吗?
2024年11月18日21:41
本文介绍了四种 CSS focus 样式::focus、:focus-visible、:focus-within 以及自定义的 :focus-visible-within,帮助提升网站用户体验。:focus 样式应用于被选中元素;:focus-visible 仅在键盘导航时显示;:focus-within 用于父元素;自定义 :focus-visible-within 结合两者效果。合理运用这些样式能使网站更方便键盘用户导航。
利用 Python 实现自动化图像裁剪:简单高效的工作流程
2024年11月11日20:49
使用 Python 和 OpenCV 自动裁剪图像,轻松实现 16:9 的完美构图。这个指南介绍了如何通过代码进行灰度化、模糊处理和边缘检测,最终识别出最重要的部分进行裁剪。特别适合需要批量处理图像的情况,节省大量时间。
每位资深前端开发人员都应了解的 TypeScript 高级概念
2024年11月11日02:07
资深前端开发者应了解 TypeScript 的高级概念,如联合类型、交叉类型、类型保护、条件类型、映射类型、模板字面量类型和递归类型。这些特性可提升代码的可维护性和可扩展性,确保在开发复杂应用时实现更高的类型安全性和效率。