你好呀,我是小冰。
前两篇写了Python的基础,有读者说:“基础看懂了,但感觉Python还有很多‘黑科技’,能不能用最简单的话讲一讲?”
好,今天就用最白的大白话,聊几个Python里特别实用、但又不复杂的“小机关”。
一、让程序不崩溃的“安全网”
写程序最怕什么?跑着跑着突然崩了。
比如你写了个程序,让用户输入数字。结果他输了个“abc”,程序直接报错退出。
try-except:给程序套个“安全网”
python
try:
num =int(input("请输入数字:")) print(f"你输入了:{num}")except:
print("输入有误,程序没崩,继续运行")人话:试试看,如果出错了,别崩,按我说的做。
科研场景:读取实验数据时,如果某个文件不存在,别报错,用默认数据代替。
python
try:
with open("实验数据.csv") as f: data = f.read()
except:
print("文件不存在,使用默认数据") data ="默认数据"
二、不用自己关文件的“自动开关”
以前读写文件,要写两行代码:打开,用完还得关上。忘了关,文件可能坏掉。
with:打开后自动关
python
# 老方法
f =open("数据.txt","w")f.write("实验数据")f.close()# 容易忘
# 新方法:with,不用自己关
with open("数据.txt","w")as f: f.write("实验数据")# 到这里自动关闭,不用操心人话:进了这个房间,走的时候自动帮你锁门。
三、处理大数据的“省内存神器”
假如你有100万行实验数据,一次性读进内存,电脑可能卡死。
用yield:要多少给多少
python
def 读大文件(文件名):
with open(文件名,"r") as f:
for 行 in f:
yield 行 # 给一行,停一下,下次要再给一行
# 用的时候,一行一行处理,内存里永远只有一行
for 一行 in 读大文件("百万数据.csv"): 处理(一行)
人话:吃面条不是一碗全倒嘴里,是一根一根吸。yield就是一根一根给。
四、给函数“穿马甲”的装饰器
有时候你想给函数加个功能,但又不想改函数本身。比如想知道每个函数跑了多久。
装饰器:给函数加功能不改代码
python
import time
def 计时器(原函数):
def 新函数():
start = time.time()
原函数()
print(f"运行时间:{time.time()-start:.2f}秒") return 新函数
# 用@符号,给函数穿上马甲
@计时器
def 做实验():
time.sleep(2)
print("实验完成")做实验()
# 输出:
# 实验完成
# 运行时间:2.00秒
人话:函数是个人,装饰器是件衣服。穿上衣服,就有了新功能,但人还是那个人。
五、从杂乱文字里抓数字的“透视眼”
你有一段文字:“温度25.3度,压力101.3千帕”。怎么把里面的数字抓出来?
正则表达式:能看懂规律的“透视眼”
python
import re
text ="温度25.3度,压力101.3千帕"
数字们 = re.findall(r"\d+\.?\d*", text)
print(数字们)# ['25.3', '101.3']
符号说明:
\d = 数字
+ = 一个或多个
\. = 小数点(加点是因为小数点有特殊含义)
? = 可有可无
* = 零个或多个
人话:找“数字,可能带小数点,可能不带”的所有内容。
科研场景:从实验报告里提取所有测量数据。
python
报告 ="第1次:23.5,第2次:24.1,第3次:22.8"数据 = re.findall(r"\d+\.?\d*", 报告)print(数据)# ['23.5', '24.1', '22.8']
六、快速生成列表的“一句话功夫”
以前生成一个列表,要写三四行:建空列表,循环,添加。
列表推导式:一行搞定
python
# 老方法
平方 =[]for i in range(10):
平方.append(i**2)
# 新方法
平方 =[i**2 for i inrange(10)]
还可以加条件:
python
# 只取偶数平方
偶数平方 =[i**2 for i in range(10) if i %2==0]
print(偶数平方)# [0, 4, 16, 36, 64]
人话:我要生成一个列表,里面是i的平方,i从0到9,如果i是偶数就放进来。
七、快速合并两个列表的“拉链”
你有两个列表:名字 = ["张三", "李四"],分数 = [85, 92]。想合成一个字典:{"张三": 85, "李四": 92}。
zip:像拉链一样配对
python
名字 =["张三","李四"]
分数 =[85,92]
字典 =dict(zip(名字, 分数))
print(字典)# {'张三': 85, '李四': 92}人话:zip就像拉链,把两个列表的对应位置咬合在一起。
写在最后
今天说的这几个,是我觉得性价比最高的Python特性——学了就能用,用了就见效。
一句话总结:
| |
|---|
try-except | |
with | |
yield | |
@装饰器 | |
正则 | |
列表推导式 | |
zip | |
这些都不是必须学的,但学会了,写代码会舒服很多。
互动话题:这几个特性里,哪个你最想试试?或者你还有其他想了解的Python技巧?评论区告诉我。