学 Python 的都该看看:100 个你一定会用到的小技巧

B站影视 韩国电影 2025-11-17 20:07 1

摘要:有没有过那种感觉?刚开始学Python的时候,兴冲冲地敲出一行代码,结果运行起来报错连连,调试半天还是一头雾水。或者,你已经写了几年代码,总觉得效率不高,代码写得像一锅粥已,维护起来头疼不。别担心,你不是一个在战斗的人!据Stack报道Overflow 的开发

有没有过那种感觉?刚开始学Python的时候,兴冲冲地敲出一行代码,结果运行起来报错连连,调试半天还是一头雾水。或者,你已经写了几年代码,总觉得效率不高,代码写得像一锅粥已,维护起来头疼不。别担心,你不是一个在战斗的人!据Stack报道Overflow 的开发者调查显示,Python 已经是全球最受欢迎的编程语言之一,用户超过千万,但有超过 70% 的开发者承认,他们在日常编码中经常忽视一些小技巧,导致工作效率低下,甚至错失亮点。今天,我就来分享100个你一定会用到的小技巧,这些不是那些高大上的算法,而是实打实的实用贴士,能让你的代码更简洁、更高效、更优雅。想象一下,掌握这些以后,你的编程生涯就像开挂一样,从菜鸟瞬间变身高手,那样的成就感,绝对会让你喜欢编码的每一天。来吧,一起探索这些Python的“秘密武器”,保证看完后,你会立刻打开编辑器试一试!

我们先从基础入门,说说列表和元组这些常用的数据结构。你知道吗?在Python中,列表推导式是加速代码的利器。比如,你想从一个列表中过滤出偶数,直接用 [x for x in range(10) if x % 2 == 0],这比循环写了一堆代码简洁多了。别小看这个,实际项目中,用它处理大数据集,能节省很多时间。记得我刚入行时,处理一个用户列表,花了半天写循环,结果同事一眼看出可以用推导式,瞬间觉得尴尬,但也从那学到一课:编程不比谁代码长,比谁聪明。

下面说说字典。很多人用字典的时候,只知道get方法,但其实defaultdict from collections模块超级实用。比如 from collections import defaultdict; d = defaultdict(列表); d['key'].append(1),这样即使key不,也不会报错,直接创建默认值。注意看,在统计词频或分组数据时,这能避免多少KeyError的烦恼啊!情绪上来说,每次代码顺利运行,那样的小确幸,真是编程的乐趣所在。

字符串操作也是痛点。split大家都会,但用join反过来拼接时,别忘了效率。像''.join(list_of_strings)比循环加字符串快多了,因为字符串是不可变的,循环加会创建很多临时对象,内存爆炸。曾经我写了个日志内存,用循环拼接,跑大文件时电脑卡死,从那以后,我就爱上join了。

函数定义时,加类型提示可以让代码更专业。比如 def add(a: int, b: int) -> int: return a + b。这不光好看,在用 mypy 检查时,可以提前发现 bug。热点来说,现在 AI 代码助手如 Copilot 流行,类型提示可以让它生成更准的建议,省时省力。

装饰器听起来高大上,其实很简单。@cache from functools,能存储函数结果,避免重复计算。就像计算斐波那契,@cache def fib(n): if n

异常处理别总用bare except,那太危险了,会吞掉所有错误。用 except Exception as e: print(e),至少错知道在哪。安全第一,代码崩溃时,你不会像无头苍蝇一样乱转。

文件操作,用with open('file.txt') as f:,自动关闭文件,避免资源泄漏。痛点是,忘关文件导致程序挂起,用就是救星。

枚举enumerate在循环列表时带索引:for i, val in enumerate(lst):。不用自己维护计数器,干净利落。

zip 工具迭代多个列表:for a, b in zip(list1, list2):。数据对齐时,神器。

all和any检查迭代器:if all(x > 0 for x in nums):。比循环判断更优雅。

切片lst[::-1]食谱列表,简单。

集合set去重:unique = list(set(lst))。大数据去重,速度飞起。

lambda匿名函数:sorted(lst, key=lambda x: x[1])。排序自定义key时,必备。

模块导入,别总import *,容易命名冲突。用 from math import sin, cos。

路径处理,用pathlib:from pathlib import Path; p = Path('dir/file.txt'); p.exists。跨平台友好。

时间处理,datetime模块:from datetime import datetime; now = datetime.now。日志记录必用。

随机random:导入random; random.choice(lst)。模拟数据时,方便。

os操作模块文件系统:import os; os.mkdir('dir')。自动化脚本常用。

sys获取模块参数:import sys; args = sys.argv[1:]。命令行工具开发。

json处理:导入json; data = json.loads(string)。API交互基础。

requests发HTTP请求:导入请求; r = requests.get('url')。爬虫或API调用。

re正则:导入re; match = re.search(pattern, string)。文本解析神器。

itertools组合:从itertools导入组合; Coms = Combinations(lst, 2)。算法题常用。

functoolspartial固定参数:from functoolsimportpartial; add5 =partial(add, 5)。函数式编程。

contextlib上下文管理:from contextlib import contextmanager; @contextmanager def my_ctx: Yield。自定义with。

asyncio异步:导入asyncio; async def func: wait Something。并发热点。

threading多线程:导入线程; t = threading.Thread(target=func); t.start。IO密集任务。

multiprocessing多进程:导入multiprocessing; p = multiprocessing.Process(target=func); p.start。CPU密集。

队列队列:从队列导入队列; q = 队列; q.put(item)。线程安全通信。

logging日志:导入日志记录;日志记录.basicConfig(级别=日志记录.INFO); logging.info('msg')。生产环境必备。

pdb调试:导入pdb; pdb.set_trace。交互式调试。

profile性能分析:从cProfile导入运行; run('func')。优化瓶颈。

numpy 负载:import numpy as np; arr = np.array([1,2,3])。数据科学入门。

pandas数据帧:import pandas as pd; df = pd.read_csv('file.csv')。数据分析神器。

matplotlib绘图:import matplotlib.pyplot as plt; plt.plot(x, y); plt.show。可视化。

scipy科学计算:from scipy import stats; stats.ttest_ind(a, b)。统计测试。

sympy符号计算:从sympy导入符号,求解; x = 符号('x'); solve(x**2 - 1)。数学图纸。

virtualenv虚拟环境:!virtualenv env; source env/bin/activate。隔离依赖。

pipreqs 生成需求:!pipreqs .。项目分享。

flake8代码检查:!flake8 file.py。保持风格一致。

pytest测试:导入pytest; @pytest.fixture def fix: 返回 1; def test(fix):assert fix == 1。单元测试。

dataclasses数据类:from dataclasses import dataclass; @dataclass类点:x:int; y: int。简化类别定义。

打字类型:from Typing import List, Dict。注解复杂类型。

enum枚举:from enum import Enum; class Color(Enum): RED = 1。常量管理。

abc抽象基类:from abc import ABC,abstractmethod; class Base(ABC): @abstractmethod def method(self): pass。接口定义。

weakref弱引用:importweakref; ref =weakref.ref(obj)。避免循环引用。

gc垃圾回收:import gc; gc.collect。手动清理内存。

ctypes调用C:import ctypes; lib = ctypes.CDLL('lib.so')。扩展性能。

subprocess运行命令:import subprocess; subprocess.run(['ls'])。shell交互。

Shutil文件操作:导入shutil; Shutil.copy('src', 'dst')。高级文件管理。

tempfile临时文件:import tempfile; with tempfile.TemporaryFile as f: f.write(b'data')。测试用。

pickle序列化:导入pickle; with open('file.pkl', 'wb') as f: pickle.dump(obj, f)。对象持久化。

shelve持久字典:导入shelve; with shelve.open('db') as db: db['key'] = value。简单存储。

dbm键值存储:import dbm; with dbm.open('db', 'c') as db: db[b'key'] = b'value'。轻量数据库。

sqlite3数据库:导入sqlite3; conn = sqlite3.connect('db.db'); c = conn.cursor; c.execute('SQL')。本地SQL。

csv处理:导入csv; with open('file.csv', 'r') as f: reader = csv.reader(f)。数据导入。

xml.etree.ElementTree XML:导入 xml.etree.ElementTree 作为 ET; tree = ET.parse('file.xml')。配置解析。

configparser配置:import configparser; config = configparser.ConfigParser; config.read('file.ini')。INI文件。

argparse参数解析:import argparse;解析器 = argparse.ArgumentParser; parser.add_argument('--opt')。CLI工具。

getopt选项:import getopt; opts, args = getopt.getopt(sys.argv[1:], 'ho:')。简单参数。

optparse旧参数:但推荐argparse。

unicodedata unicode:导入unicodedata; unicodedata.normalize('NFKD', s)。字符串规范化。

codecs编码:导入codecs; with codecs.open('file', 'r', 'utf-8') as f:。处理编码。

locale本地化:import locale; locale.setlocale(locale.LC_ALL, '')。货币时间格式。

日历日历:导入日历; calendar.month(2025, 11)。生成日历。

time时间:导入时间; time.sleep(1)。暂停。

sched调度:import sched; s = sched.scheduler; s.enter(1, 1, func)。

heapq堆:导入heapq; heapq.heappush(heap, item)。优先队列。

bisect二分:导入bisect; bisect.insort(lst, item)。小区列表。

fractions分数:fromfractionsimportFraction; f = 分数(1, 2)。精确计算。

小数小数:fromdecimal导入Decimal; d = Decimal('0.1')。金融精度。

math 数学:导入数学; math.sqrt(4)。基本函数。

cmath复数:import cmath; cmath.sqrt(-1)。复杂数。

统计统计:进口统计; stats.mean(data)。

random.uniform 随机浮点:random.uniform(0, 1)。

uuid唯一ID:import uuid; uuid.uuid4。生成ID。

hashlib哈希:import hashlib; hashlib.md5(b'data').hexdigest。校验。

hmac消息认证:import hmac; hmac.new(key, msg, hashlib.sha256).hexdigest。

Secrets安全随机:导入秘密; Secrets.token_hex(16)。密码生成。

base64编码:导入base64; base64.b64encode(b'data')。传输。

zlib压缩:import zlib; zlib.compress(b'data')。数据压缩。

bz2 BZ2压缩:import bz2; bz2.compress(b'数据')。

lzma LZMA压缩:import lzma; lzma.compress(b'data')。

tarfile tar:import tarfile; with tarfile.open('file.tar', 'w') as tar: tar.add('file')。归档。

zipfile zip:import zipfile; with zipfile.ZipFile('file.zip', 'w') as z: z.write('file')。

mmap内存映射:import mmap; with open('file', 'r+') as f: mm = mmap.mmap(f.fileno, 0)。

signal信号:输入信号; signal.signal(signal.SIGINT, handler)。中断处理。

atexit退出钩子:import atexit; atexit.register(func)。清理资源。

warnings警告:导入警告; warnings.warn('msg')。非错误提示。

tracemalloc追踪内存:import tracemalloc; tracemalloc.start。泄漏检测。

检查检查:进口检查; spect.signature(func)。函数信息。

dis反布局:导入dis; dis.dis(func)。字节码。

ast抽象语法树:import ast; tree = ast.parse('code')。代码分析。

代码交互:导入代码; code.interact。嵌入REPL。

site站点:导入站点; site.getsitepackages。包路径。

__future__未来:从未来导入注释。启用新功能。

builtins内置:importbuiltins; builtins.print('hi')。核心函数。

__main__主模块:if name == ' main ': main。脚本模式。

这些技巧听起来多吧?但其实,每一个都是从实际痛点中提炼出来的。记得我第一次用asyncio处理并发请求时,那种从阻塞到解决异步的转变,感觉世界都变快了。或者用pandas分析数据,瞬间从Excel手动操作解放,那自由感,简直就是程序员的诗意。你学Python,不就是为了现实问题,让生活更高效吗这些小技巧,就是你的加速器。

当然,技巧再多,还有实践。建议你边看边尝试,遇到不懂的,查文档或Stack Overflow。热点上,Python在AI、数据科学火热,这些技巧让你跟上潮流。看完这100个,是不是觉得编程没那么难了?分享给吧,一起进步,这样一致,让你的圈子更严谨。

最后,记住:编程是马拉松,坚持使用这些技巧,你的代码会越来越美。加油!

来源:跟橙姐学代码

相关推荐