百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

10 个改变我工作方式的 Python 习惯

off999 2025-07-24 21:04 8 浏览 0 评论

十年前,我的浏览器常年开着二十多个 StackOverflow 页面,只为搞清为什么又抛出“NoneType 不可迭代”的异常。如今,同事把问题抛给我,而我几乎不用搜索就能给出答案。区别不是天赋,而是下面这 10 个被我长期坚持的小习惯。它们没有一条是“用列表推导”这类老生常谈,却在日复一日的编码里悄悄重塑了我的效率。


1. 先放下 print,用 logging 把调试变成一分钟的事

还在用print()找 Bug 的人,往往在一堆输出里手动对齐时间戳。Python 自带的logging模块一次配置,终身受益:

import logging

logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s | %(levelname)s | %(message)s'
)
logging.info("App started")

实践记录:我排查一个偶发的 API 超时问题时,只在关键路径加了两行logging.debug()。日志里精确到毫秒的时间差让我在一分钟内定位到是网络握手阶段卡死,而不是代码逻辑出错。


2. 为每个项目建独立虚拟环境,别给未来挖坑

命令只有一行,却常被忽略:

python -m venv .venv && source .venv/bin/activate

我统计过,近一年在 GitHub 上随机浏览的 90%公开项目都没有提交虚拟环境说明。结果可想而之:依赖版本冲突、代码在别人机器上跑不动。
.venv/写进.gitignore,你就已经在团队协作里领先一步。


3. 用 concurrent.futures 把慢任务并行,14 分钟缩短到几十秒

网络请求 IO 密集?CPU 运算密集?concurrent.futures两行代码给出答案:

from concurrent.futures import ThreadPoolExecutor

def fetch_url(url):
    # 网络请求或IO操作
    pass

urls = ["https://a.com", "https://b.com"]
with ThreadPoolExecutor() as executor:
    executor.map(fetch_url, urls)

如果是计算密集,把ThreadPoolExecutor换成ProcessPoolExecutor即可。
真实案例:我曾维护一个批量抓取并解析 500 个网页的脚本,串行跑需 15 分钟。引入线程池后,运行时间压到 50 秒,CPU 利用率从 10%提升到 85%。


4. dataclass 让类定义缩成三行,还附带 repr 和 eq

手写__init____repr____eq__的时代过去了:

from dataclasses import dataclass

@dataclass
class User:
    name: str
    age: int

对象打印出来就是清晰的User(name='Alice', age=30),无需额外代码。
需要更严格的类型校验时,直接叠加pydantic,迁移成本几乎为零。


5. 用 subprocess 写部署脚本,彻底告别易碎的 Bash

Bash 脚本在跨平台时往往因路径差异或引号问题崩掉。Python 的subprocess提供统一接口:

import subprocess

subprocess.run(['git', 'status'])

异常捕获、日志记录、条件分支都能用 Python 语法完成。
我所在团队曾用 30 行 Python 脚本替代 5 个互相关联的 Bash 部署脚本,上线后再也没有出现“在我机器上能跑”的尴尬。


6. 先跑 cProfile 再谈优化,别凭感觉改代码

性能瓶颈在哪?猜不准,就让数据说话:

import cProfile

cProfile.run('your_function()')

输出里自带每个函数的调用次数与耗时占比。我曾以为数据库查询拖慢了整个服务,跑完分析才发现 90%时间耗在一个正则表达式上。改一行代码,QPS 翻倍。


7. enumerate 和 zip 让循环易读又防错

for i, item in enumerate(my_list):
    print(i, item)

相比range(len(my_list)),既省去下标越界的隐患,又一眼看出意图。
同时遍历多个列表时,zip同样直观:

for name, age in zip(names, ages):
    ...

任何需要手动索引的场景,都值得先想想这两个内置函数能否直接解决。


8. 用生成器逐行吃文件,12GB 数据只占 100MB 内存

一次性把大文件读进内存,是最容易犯的内存错误:

def read_large_file(file_path):
    with open(file_path) as f:
        for line in f:
            yield line

for line in read_large_file('big.txt'):
    process(line)

生成器把文件变“流”,处理速度与内存占用解耦。
去年我解析 12GB 日志文件,全程内存峰值不到 100MB,机器没卡,咖啡也没凉。


9. argparse 把脚本包装成命令行工具,告别硬编码

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--file')
args = parser.parse_args()

print(args.file)

三步就能让脚本支持参数:

  1. 建解析器
  2. 加参数
  3. 解析

我把日常用的四个小脚本统一加上argparse,如今它们像系统命令一样常驻终端,随拿随用。


10. 用main守卫让模块既可导入也可直接运行

def main():
    print("Doing stuff")

if __name__ == "__main__":
    main()

这条习惯保证了代码既能被测试框架导入,也能在命令行直接执行。
任何 Python 文件都该以这个结构结尾,它让模块职责分明,日后拆分或打包都不会返工。


小结:不是技巧,而是默认动作

这 10 件事没有一条需要高智商,却需要把“知道”变成“肌肉记忆”:

  • 开新项目,先敲python -m venv .venv
  • 调试第一反应是加logging.debug而不是print
  • 写循环先想enumerate/zip
  • 提交前确认有if __name__ == "__main__"

坚持一年后,你会像我一样,从搜索答案的人变成被同事请教的人。

如果你正准备整理自己的 Python 工作流,不妨把这篇文章收藏,逐项对照,看看哪些习惯已经融入日常,哪些还需要刻意练习。真正的效率提升,不靠秘籍,靠把正确动作重复一千次。

相关推荐

Python Flask 容器化应用链路可观测

简介Flask是一个基于Python的轻量级Web应用框架,因其简洁灵活而被称为“微框架”。它提供了Web开发所需的核心功能,如请求处理、路由管理等,但不会强制开发者使用特定的工具或库。...

Python GUI应用开发快速入门(python开发软件教程)

一、GUI开发基础1.主流GUI框架对比表1PythonGUI框架比较框架特点适用场景学习曲线Tkinter内置库,简单小型应用,快速原型平缓PyQt功能强大,商用许可专业级桌面应用陡峭PySi...

【MCP实战】Python构建MCP应用全攻略:从入门到实战!

实战揭秘:Python Toga 打造跨平台 GUI 应用的神奇之旅

在Python的世界里,GUI(图形用户界面)开发工具众多,但要找到一款真正跨平台、易于使用且功能强大的工具并不容易。今天,我们就来深入探讨一下Toga——一款Python原生、操作系统原...

python应用目录规划(python的目录)

Python大型应用目录结构规划(企业级最佳实践)核心原则模块化:按业务功能拆分,高内聚低耦合可扩展性:支持插件机制和动态加载环境隔离:清晰区分开发/测试/生产环境自动化:内置标准化的构建测试部署流...

Python图形化应用开发框架:PyQt开发简介

PyQt概述定义:PyQt是Python绑定Qt框架的工具集,用于开发跨平台GUI应用程序原理:通过Qt的C++库提供底层功能,PyQt使用SIP工具生成Python绑定特点:支持Windows/ma...

[python] 基于PyOD库实现数据异常检测

PyOD是一个全面且易于使用的Python库,专门用于检测多变量数据中的异常点或离群点。异常点是指那些与大多数数据点显著不同的数据,它们可能表示错误、噪声或潜在的有趣现象。无论是处理小规模项目还是大型...

Python、Selenium 和 Allure 进行 UI 自动化测试的简单示例脚本

环境准备确保你已经安装了以下库:SeleniumAllurepytest你可以使用以下命令安装所需库:pipinstallseleniumallure-pytestpytest示例代码下面的代...

LabVIEW 与 Python 融合:打造强大测试系统的利器

在现代测试系统开发领域,LabVIEW和Python各自凭借独特优势占据重要地位。LabVIEW以图形化编程、仪器控制和实时系统开发能力见长;Python则凭借丰富的库资源、简洁语法和强大数...

软件测试进阶之自动化测试——python+appium实例

扼要:1、了解python+appium进行APP的自动化测试实例;2、能根据实例进行实训操作;本课程主要讲述用python+appium对APP进行UI自动化测试的例子。appium支持Androi...

Python openpyxl:读写样式Excel一条龙,测试报表必备!

无论你是测试工程师、数据分析师,还是想批量导出Excel的自动化工作者,只需一个库openpyxl,即可高效搞定Excel的各种需求!为什么选择openpyxl?支持.xlsx格式...

Python + Pytest 测试框架——数据驱动

引言前面已经和大家介绍过Unittest测试框架的数据驱动框架DDT,以及其实现原理。今天和大家分享的是Pytest测试框架的数据驱动,Pytest测试框架的数据驱动是由pytest自...

这款开源测试神器,圆了我玩游戏不用动手的梦想

作者:HelloGitHub-Anthony一天我在公司用手机看游戏直播,同事问我在玩什么游戏?我和他说在看直播,他恍然大悟:原来如此,我还纳闷你玩游戏,咋不用动手呢。。。。一语惊醒梦中人:玩游戏不用...

Python单元测试框架对比(pycharm 单元测试)

一、核心框架对比特性unittest(标准库)pytest(主流第三方)nose2(unittest扩展)doctest(文档测试)安装Python标准库pipinstallpytestp...

利用机器学习,进行人体33个2D姿态检测与评估

前几期的文章,我们分享了人脸468点检测与人手28点检测的代码实现过程,本期我们进行人体姿态的检测与评估通过视频进行人体姿势估计在各种应用中起着至关重要的作用,例如量化体育锻炼,手语识别和全身手势控制...

取消回复欢迎 发表评论: