👉 项目官网:https://www.python-office.com/ 👈

👉 本开源项目的交流群 👈

github star gitee star atomgit star

AI编程 AI交流群

image.png

大家好,这里是程序员晚枫,正在all in AI编程实战,全网同名。

3年经验Python工程师,被实习生用10行代码当场秒杀?今天这篇文章,带你3分钟掌握6个高阶技巧,直接开挂!

首先说明:今天分享的这些技巧,不是网上哪些用一些花里胡哨的入门语法,把多行代码合并为一行那么无聊。

──────────────────

技巧 1 collections.Counter

刚学算法的时候,经常遇到统计词频的问题。

你有没有用过Python原生的collections这个库?

1
2
3
4
5
6
7
8
9
10

from collections import Counter

text = '''
Python 自动化 晚枫 python-office 办公 python-office Python 自动化 python-office 自动化 办公 晚枫 程序员 晚枫 python-office
'''

# 一行出词频排行榜
top3 = Counter(text.split()).most_common(3)
print(top3) # [('python-office', 4), ('自动化', 3), ('晚枫', 3)]

collections这个模块实现了一些专门化的容器,提供了对 Python 的通用内建容器 dict、list、set 和 tuple 的补充。

Counter 是 dict 的子类,用于计数 hashable 对象。它是一个多项集,元素存储为字典的键而它们的计数存储为字典的值。计数可以是任何整数,包括零或负的计数值。Counter 类与其他语言中的 bag 或 multiset 很相似。

扩展阅读:https://docs.python.org/zh-cn/3.13/library/collections.html#collections.Counter

──────────────────

技巧 2 装饰器缓存

在函数名和参数不变,并且函数计算很耗时的情况下,这个装饰器,可以快速取出上一次计算的结果。

1
2
3
4
5
6
7
8
9
10
11
12
13

import functools
import time


@functools.lru_cache(maxsize=None) # 无限缓存
def slow_func(x):
time.sleep(1) # 一些很慢的逻辑
return x * x


print(slow_func(10)) # 第一次1秒
print(slow_func(10)) # 第二次直接读缓存,毫秒级

扩展阅读:https://docs.python.org/zh-cn/3.14/library/functools.html

──────────────────

技巧 3 生成器表达式

记得当年参加校招的笔试,被这道题难住了一晚上!

1
2
3
4
5
6
7
8
9
10

# 需求:读取百万行日志,统计含“ERROR”的行数
# 传统写法,先把所有行读到内存
with open('huge.log') as f:
lines = f.readlines()
error_lines = [l for l in lines if 'ERROR' in l]

# 高阶写法:把 [] 换成 (),边读边算,内存恒稳
error_lines = (l for l in open('huge.log') if 'ERROR' in l)
print(sum(1 for _ in error_lines)) # 直接计数不占内存

扩展阅读:https://docs.python.org/zh-cn/3.14/reference/expressions.html#generator-expressions

──────────────────

技巧 4 dataclass省掉样板代码

@dataclass定义类,简直不要太方便!

而且这个特性早在3.7就引入Python了,你用过吗?

1
2
3
4
5
6
7
8
9
10
11
12

from dataclasses import dataclass

@dataclass
class Employee:
name: str
age: int
salary: float

# 两行搞定__init__/__repr__/__eq__
e = Employee('张三', 28, 20000.0)
print(e) # Employee(name='张三', age=28, salary=20000.0)

扩展阅读:https://docs.python.org/zh-cn/3.14/library/dataclasses.html

──────────────────

技巧 5 解包与通配符

解包是一个非常实用的编程技巧,当需要取出集合最后一个元素,但不知道集合元素总数的时候,你会怎么做?

1
2
3
4
5
6
7
8
9
10
11

# 需求:函数返回多个值,忽略中间无用字段
def get_user():
return 'Alice', 28, 'alice@example.com', 'Shanghai'

name, age, _, city = get_user() # _ 占位忽略邮箱
print(name, city)

# 只想要首尾,中间全部打包
first, *_, last = get_user()
print(first, last) # Alice Shanghai

扩展阅读:https://docs.python.org/zh-cn/3/reference/simple_stmts.html#assignment-statements

──────────────────

技巧 6 内存视图memoryview

读取大文件必备!

1
2
3
4
5
6
7
8

# 需求:大文件切片不复制
with open('big.bin', 'rb') as f:
mm = memoryview(f.read()) # 零拷贝视图

# 只要前1MB与后1MB拼接,不额外占内存
new_data = mm[:1024*1024] + mm[-1024*1024:]
print(len(new_data))

扩展阅读:https://docs.python.org/zh-cn/3.14/library/stdtypes.html#memory-views

──────────────────


大家在学习课程中有任何问题,欢迎+微信和我交流👉我的联系方式:微信、读者群、1对1、福利

扫一扫,领红包

美团红包

程序员晚枫专注AI编程培训,小白看完他和图灵社区合作的教程《30讲 · AI编程训练营》就能上手做AI项目。

🎓 AI 编程实战课程

想系统学习 AI 编程?程序员晚枫的 AI 编程实战课 帮你从零上手!