学了四年Python还不知道这些隐藏技巧,白学了
我见过太多学了四年Python的人。他们能写爬虫能搭网站能做数据分析。可翻翻他们写的代码。全是新手味。这让我觉得很可惜。
列表推导式是第一个该掌握的技巧。有人还在用for循环往列表里塞数。一行代码能搞定的事非要写五行。
numbers = [x2 for x in range(10) if x % 2 == 0] 这种写法快得不止一星半点。习惯以后你根本不想回头看老代码。
字典里用get方法也是个宝藏。很多人取字典值直接写 dict[key]。key不存在直接崩溃。改成 dict.get(key, 默认值) 就稳了。代码不会突然暴毙。
enumerate是遍历列表的神器。新手会写 i=0 for item in list: 然后 i+=1。麻烦。直接 for i, item in enumerate(list): 就好了。既有下标又有值。代码干净多了。
合并字典也讲究。两个字典想合并不用写循环。新版本Python支持 d = {dict1, dict2}。简洁到让人想哭。
链式比较是少有人用的语法糖。判断一个数在不在区间里。有人写 if x > 0 and x < 10: 其实可以写 if 0 < x < 10: 看着舒服多了。
f-string是格式化字符串的王者。老代码里那些 %s 和 .format() 可以退休了。直接用 name = '小明' print(f'我叫{name}') 方便又直观。
with语句很多人用。但只有少数人知道contextlib。想自己写个上下文管理器不用写类。用 @contextmanager 装饰器加个yield就行。代码量直接砍半。
zip函数也是个宝贝。想同时遍历两个列表。有人写 for i in range(len(list1)): 太笨了。用 for a, b in zip(list1, list2): 多清爽。
Counter类能让计数变简单。比如统计列表里每个元素出现次数。自己写字典要很多行。用 from collections import Counter 然后 Counter(list) 就出结果了。
args和kwargs有些人学了四年还不会用。遇到不确定参数数量的函数就束手无策。其实 def func(args, kwargs) 能接收任意参数。处理灵活数据特别管用。
调试代码习惯了print不怕。但pdb比print强十倍。import pdb 然后 pdb.set_trace() 能在任意位置打断点。值和变量看的一清二楚。比改代码加print省事太多。
很多老手也不知道tqdm。跑循环时加个进度条能让心理压力小很多。from tqdm import tqdm for i in tqdm(range(10000)): 看着进度跑心里踏实。
__init__.py是个被忽略的文件。很多人以为空着就行。其实在里面写 __all__ 可以控制别人能导入什么。还能把子模块的东西直接暴露到顶层包。
一行代码交换变量这种基本功就不提了。a, b = b, a 几乎人人知道。
但海象运算符 := 就没那么普及了。它能在表达式内部赋值。比如 while (line := file.readline()) != '': 少写一行声明。有点反直觉但用熟了很顺手。
类型注解也不是摆设。def add(a: int, b: int) -> int: 看着模棱两可。配合mypy能自动检查类型错误。大型项目能省大量调试时间。
我只说了十几个技巧。四年没学会这些真的白学了。打开你电脑看看刚写的代码。能用上几条改几条。世界会不一样。