首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >没用过这6个高阶技巧,别说你是Python程序员

没用过这6个高阶技巧,别说你是Python程序员

原创
作者头像
程序员晚枫
发布2025-08-16 01:20:57
发布2025-08-16 01:20:57
34100
代码可运行
举报
文章被收录于专栏:Python高级编程Python高级编程
运行总次数:0
代码可运行

大家好,这里是程序员晚枫,全网同名。

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

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

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

技巧 1 collections.Counter

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

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

代码语言:python
代码运行次数:0
运行
复制
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)]

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

技巧 2 装饰器缓存

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

代码语言:python
代码运行次数:0
运行
复制
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))  # 第二次直接读缓存,毫秒级

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

技巧 3 生成器表达式

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

代码语言:python
代码运行次数:0
运行
复制
# 需求:读取百万行日志,统计含“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))     # 直接计数不占内存

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

技巧 4 dataclass省掉样板代码

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

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

代码语言:python
代码运行次数:0
运行
复制
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)

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

技巧 5 解包与通配符

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

代码语言:python
代码运行次数:0
运行
复制
# 需求:函数返回多个值,忽略中间无用字段
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

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

技巧 6 内存视图memoryview

读取大文件必备!

代码语言:python
代码运行次数:0
运行
复制
# 需求:大文件切片不复制
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))

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


大家在学习Python中有任何问题,欢迎在评论区和我交流!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 技巧 1 collections.Counter
  • 技巧 2 装饰器缓存
  • 技巧 3 生成器表达式
  • 技巧 4 dataclass省掉样板代码
  • 技巧 5 解包与通配符
  • 技巧 6 内存视图memoryview
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档