刚搞定Python基础语法,写代码还在"循规蹈矩"?这5个进阶基础知识点,让你告别冗余代码,效率翻倍!全程干货+可直接复制的代码示例,新手也能轻松拿捏~
一、闭包:函数里的"隐藏小仓库"
闭包就是"函数嵌套+内部函数引用外部变量",能实现数据封装,不用全局变量也能存状态~
核心技巧:
- 外层函数返回内层函数(不是调用结果)
- 内层函数引用外层函数的局部变量
- 保持变量状态,避免全局污染
代码示例:计数器功能
def counter():
count = 0 # 外层函数变量,被内层引用
def add():
nonlocal count # 声明使用外层局部变量
count += 1
return count
return add # 返回内层函数对象
# 使用闭包
num_count = counter()
print(num_count()) # 输出:1
print(num_count()) # 输出:2
print(num_count()) # 输出:3
二、生成器:告别"内存刺客"
还在用电列表存海量数据?生成器按需生成数据,占用内存极少,循环时才计算下一个值~
核心技巧:
- 用 yield 关键字替代 return
- 每次调用 next() 或循环时,暂停在 yield 处
- 适合处理大数据量、无限序列
代码示例:生成斐波那契数列
# 生成器函数
def fib_generator(n):
a, b = 0, 1
for _ in range(n):
yield a # 暂停并返回当前值
a, b = b, a + b
# 遍历生成器(按需生成,不占内存)
for num in fib_generator(10):
print(num, end=" ") # 输出:0 1 1 2 3 5 8 13 21 34
三、迭代器:让对象"可循环"的魔法
迭代器是实现了 __iter__() 和 __next__() 方法的对象,列表、字典等可迭代对象的底层原理~
核心技巧:
-
iter()函数获取迭代器对象 -
next()函数获取下一个元素,耗尽抛出StopIteration - 自定义迭代器实现个性化循环逻辑
代码示例:自定义迭代器(遍历1~n)
class MyIterator:
def __init__(self, n):
self.n = n
self.current = 1
def __iter__(self):
return self # 返回自身
def __next__(self):
if self.current > self.n:
raise StopIteration # 迭代终止条件
temp = self.current
self.current += 1
return temp
# 使用自定义迭代器
for num in MyIterator(5):
print(num, end=" ") # 输出:1 2 3 4 5
四、模块与包:代码"分家"更优雅
写的代码越来越多?用模块(.py文件)和包(文件夹+init.py)拆分功能,复用性拉满~
核心技巧:
- 模块:单个
.py文件,用import 模块名导入 - 包:多个模块组成的文件夹,需包含
__init__.py - 用
from ... import ...精准导入,避免命名冲突
代码示例:
1. 模块使用(假设创建了utils.py)
# utils.py(模块文件)
def add(a, b):
return a + b
def multiply(a, b):
return a * b
2. 导入并使用模块
# main.py
import utils # 导入整个模块
from utils import multiply # 精准导入单个函数
print(utils.add(2, 3)) # 输出:5
print(multiply(2, 3)) # 输出:6
五、异常处理:让程序"抗造"不崩溃
新手写代码最怕报错就闪退?异常处理能捕获错误,让程序优雅降级~
核心技巧:
-
try-except捕获指定异常 -
else:无异常时执行 -
finally:无论是否异常都执行(如关闭文件)
代码示例:文件读取异常处理
try:
with open("test.txt", "r") as f:
content = f.read()
except FileNotFoundError:
print("错误:文件不存在!")
except Exception as e:
print(f"未知错误:{e}")
else:
print("文件读取成功:", content)
finally:
print("操作结束(无论成功与否都会执行)")
总结
这5个知识点是Python进阶的"地基"——闭包实现数据封装,生成器节省内存,迭代器理解循环本质,模块包优化代码结构,异常处理提升程序稳定性。练熟这些,代码会更规范、更抗造~