玩转 Python:多线程、装饰器、视觉检测与正则匹配实战

Python 作为一门简洁又强大的编程语言,在多线程编程、函数增强、计算机视觉、文本处理等多个领域都有着广泛的应用。本文将结合几个实用的代码案例,带你上手 Python 的多线程、装饰器、OpenCV 颜色检测和正则表达式匹配,从基础应用到实际场景,解锁 Python 的多样玩法。

一、多线程编程:让程序 "并行" 起来

在 Python 中,threading库是实现多线程的核心工具,它能让程序在执行耗时操作时,不阻塞主线程,提升运行效率。

1. 基础多线程示例

先看一个简单的多线程执行函数的例子:

python 复制代码
import threading
import time


def worker():
    print('线程开始执行')
    for i in range(5):
        print(f'线程正在工作: {i}')
    print('线程执行完毕')


thread = threading.Thread(target=worker)
thread.start()
print('****主线程继续执行****')


def worker(name):
    print(f'{name} 线程开始执行')
    for i in range(5):
        print(f'{name} 正在工作: {i}')
        time.sleep(0.5)
    print(f'{name} 线程执行完毕')


thread1 = threading.Thread(target=worker, args=('线程1',))
thread2 = threading.Thread(target=worker, args=('线程2',))
thread1.start()
thread2.start()
print('****主线继续执行****')

运行这段代码,你会发现 "线程 1" 和 "线程 2" 交替输出内容,主线程也不会等待子线程完成才执行后续代码,这就是多线程的 "并行" 特性 ------ 多个线程在 CPU 中交替执行,看起来像是同时运行。

2. 多线程执行不同耗时任务

我们还可以让不同线程执行不同耗时的任务,比如模拟 "等待不同时间后输出结果":

复制代码
def run(t):
    time.sleep(t)
    print(f'我等了{t}秒')

t1 = threading.Thread(target=run, args=(3,))
t2 = threading.Thread(target=run, args=(6,))

t1.start()
print('开始计时')
t2.start()

执行后,主线程先打印 "开始计时",3 秒后t1线程输出 "我等了 3 秒",6 秒后t2线程输出 "我等了 6 秒",完美体现了多线程处理异步任务的优势。

二、装饰器:给函数 "加 buff"

装饰器是 Python 的语法糖,能在不修改函数源码的前提下,为函数增加额外功能。比如实现 "每调用 N 次函数,执行指定操作" 的需求。

1. 自定义装饰器示例

下面的装饰器execute_after_n_calls,能实现 "每调用 3 次被装饰函数,就执行一次指定函数":

python 复制代码
import re

def execute_after_n_calls(n, w2set):
    def decorator(func):
        def wrapper(*args, **kwargs):
            # 统计函数调用次数
            wrapper.count += 1
            # 执行原函数并获取结果
            result = func(*args, **kwargs)
            # 每调用n次,执行w2set函数
            if wrapper.count % n == 0:
                w2set()
            return result
        # 初始化调用次数
        wrapper.count = 0
        return wrapper
    return decorator

# 被触发的函数
def bb():
    print('b')

# 用装饰器增强aa函数
@execute_after_n_calls(3, bb)
def aa():
    print('a')

# 测试调用
for _ in range(6):
    aa()

运行结果会依次输出:a a a b a a a b。装饰器通过闭包特性,巧妙地统计函数调用次数,实现了函数功能的扩展,这种方式在日志记录、性能统计、权限校验等场景中非常实用。

三、OpenCV 实战:颜色检测识别牛皮纸箱

利用 OpenCV 和 NumPy,我们可以实现基于颜色的物体检测,比如识别摄像头画面中的牛皮纸箱(通过匹配棕色色域)。

1. 颜色检测核心代码
python 复制代码
import cv2
import numpy as np

# 打开摄像头
cap = cv2.VideoCapture(0)

while True:
    try:
        # 读取帧
        ret, frame3 = cap.read()
        # 转换为HSV色彩空间(更适合颜色检测)
        hsv_image = cv2.cvtColor(frame3, cv2.COLOR_BGR2HSV)
        
        # 定义棕色的HSV范围
        lower_brown = np.array([10, 30, 30])
        upper_brown = np.array([30, 255, 255])
        
        # 创建掩码(只保留棕色区域)
        mask = cv2.inRange(hsv_image, lower_brown, upper_brown)
        # 计算棕色像素占比
        white_pixels = np.sum(mask == 255)
        total_pixels = mask.shape[0] * mask.shape[1]
        color_percentage = (white_pixels / total_pixels) * 100
        
        # 占比≥20%时判定为检测到牛皮纸箱
        if color_percentage >= 20:
            print('检测到牛皮纸箱')
        
        # 显示画面
        cv2.imshow('mask', mask)
        cv2.imshow('Filtered Image1', frame3)
        
        # 按ESC退出
        if cv2.waitKey(1) == 27:
            break
    except:
        pass

# 释放资源
cap.release()
cv2.destroyAllWindows()
2. 关键知识点
  • HSV 色彩空间:相比 RGB,HSV 更能抵抗光照变化的影响,是颜色检测的首选;
  • 掩码(mask):通过cv2.inRange筛选出指定颜色范围的像素,白色(255)为匹配区域,黑色(0)为不匹配;
  • 像素占比计算:通过统计匹配像素的数量,判断画面中目标颜色的占比,实现物体识别。

四、正则表达式:精准匹配文本内容

正则表达式是处理文本的 "利器",能快速筛选出符合规则的字符串,比如匹配特定格式的编号、密码等。

1. 多规则文本匹配示例

下面的代码实现了两种规则的字符串匹配:① 包含字母 + 数字,长度 2-8 且可含连字符;② 4-7 位纯数字。

python 复制代码
import re

def process_string(input_string):
    aa = []
    parts = input_string.split()
    # 规则1:含字母+数字,长度2-8,可含-
    pattern_alphanumeric = re.compile(r'^(?=.*[a-zA-Z])(?=.*\d)[a-zA-Z\d-]{2,8}$')
    # 规则2:4-7位纯数字
    pattern_at_least_two_digits = re.compile(r'^\d{4,7}$')
    
    for part in parts:
        if pattern_alphanumeric.match(part) or pattern_at_least_two_digits.match(part):
            aa.append(part)
    return aa

# 测试用例
test_list = ['Aceite p04476', 'sdighsg', 's4967xl', 'v0-4985', '123', '1234568956', '45825']
result = []
for s in test_list:
    result.extend(process_string(s))

print('匹配结果:', result)

运行结果会输出:['p04476', 's4967xl', 'v0-4985', '45825'],精准筛选出符合规则的字符串。正则表达式的优势在于灵活定义匹配规则,在数据清洗、文本解析、表单验证等场景中必不可少。

五、总结

本文从四个不同的维度展示了 Python 的实战应用:

  • 多线程:利用threading实现并行任务,提升程序执行效率;
  • 装饰器:通过闭包扩展函数功能,让代码更简洁、易维护;
  • OpenCV 颜色检测:结合 HSV 色彩空间实现物体识别,落地计算机视觉小应用;
  • 正则表达式:精准匹配文本规则,高效处理文本数据。

Python 的魅力在于其丰富的库和灵活的语法,这些基础实战案例不仅能帮助你掌握核心知识点,也能为后续的复杂项目打下基础。不妨动手运行代码,尝试修改参数和规则,探索更多 Python 的玩法吧!

相关推荐
香山上的麻雀10081 小时前
由 Rust 开发的能大幅降低LLM token消耗的高性能 CLI 代理工具 rtk
开发语言·后端·rust
Lucas_coding1 小时前
【xiaozhi-esp32-server-服务端全模块启动】 xiaozhi-server 获取6位有效验证码
python
薛定猫AI1 小时前
【深度解析】Qwen 3.6 Max Preview:面向智能体编码、视觉推理与 Three.js 前端生成的能力拆解
开发语言·前端·javascript
❆VE❆1 小时前
python实战(一):对接AI大模型并应用
开发语言·人工智能·python·ai
qq_372906932 小时前
CSS怎么在flex布局中实现项目均分间距_设置justify-content space-evenly
jvm·数据库·python
格林威2 小时前
堡盟Baumer VCX系列工业相机供电与触发:网口(GigE) vs USB3.0
开发语言·人工智能·数码相机·计算机视觉·视觉检测·工业相机·高速相机
yangtuoni2 小时前
vscode调试C++ python相关配置
c++·vscode·python
小章UPUP2 小时前
2026 信息技术中考复习资料大全
python
2401_882273722 小时前
CSS 背景色无法撑满父容器?解决浮动导致的高度塌陷问题
jvm·数据库·python