当前位置:首页>python>Python里那些好用的“小机关”——一个工科生的Python笔记(三)

Python里那些好用的“小机关”——一个工科生的Python笔记(三)

  • 2026-09-02 19:27:32
Python里那些好用的“小机关”——一个工科生的Python笔记(三)
文/小冰

你好呀,我是小冰。

前两篇写了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技巧?评论区告诉我。

最新文章

随机文章