1. 闭包(Closure)——“记住过往,活在未来” 😏
它是什么:
闭包是一个函数,它能“记住”外部作用域的变量,即使外部函数已经结束。
它干嘛用:
适合需要“保存状态”的地方,比如计数器、事件处理器。
案例:计数器
def counter():
count = 0
def increment():
nonlocal count
count += 1
return count
return increment
my_counter = counter()
print(my_counter()) # 输出 1
print(my_counter()) # 输出 2
场景:
用闭包实现一个访问次数的计数器,或者动态生成自定义函数。
这里插播一条粉丝福利,如果你正在学习Python或者有计划学习Python,想要突破自我,对未来十分迷茫的,可以点击这里获取最新的Python学习资料和学习路线规划(免费分享,记得关注)
2. 装饰器(Decorator)——“代码的化妆师” 💅
它是什么:
装饰器是一个函数,能在另一个函数运行前后插入代码,用来增强功能。
它干嘛用:
装饰器最常见的用法是日志记录、权限验证和性能测量。
案例:给函数加日志
def logger(func):
def wrapper(*args, **kwargs):
print(f"Calling {func.__name__} with {args}, {kwargs}")
result = func(*args, **kwargs)
print(f"{func.__name__} returned {result}")
return result
return wrapper
@logger
def add(x, y):
return x + y
add(3, 5)
场景:
比如你想统计函数调用次数、计算执行时间,或者验证用户是否有权限操作某些功能。
3. 生成器(Generator)——“懒惰但高效” 😴
它是什么:
生成器是一个函数,它不会一次性返回所有数据,而是需要的时候才生成数据。
它干嘛用:
用于处理超大数据集或无限序列。
案例:生成斐波那契数列
def fibonacci():
a, b = 0, 1
while True:
yield a
a, b = b, a + b
fib = fibonacci()
print(next(fib)) # 输出 0
print(next(fib)) # 输出 1
print(next(fib)) # 输出 1
场景:
比如处理数百万行日志,或者实现分页加载。
4.*args 和**kwargs——“装得下全世界的参数” 🧳
它是什么:
-
*args收集任意数量的位置参数。 -
**kwargs收集任意数量的关键字参数。
它干嘛用:
写灵活的函数,适配不同参数组合。
案例:万能求和函数
def super_sum(*args, **kwargs):
result = sum(args) + sum(kwargs.values())
return result
print(super_sum(1, 2, 3, x=4, y=5)) # 输出 15
场景:
写框架、库,或者处理动态参数配置。
5. 魔法方法(Magic Methods)——“让对象与众不同” 🧙♂️
它是什么:
以__开头和结尾的特殊方法,比如__str__、__getitem__等,能让你的对象拥有特殊功能。
它干嘛用:
用于定制对象的行为,比如支持+、[],或友好的打印。
案例:实现一个“可加”的Vector类
class Vector:
def __init__(self, x, y):
self.x = x
self.y = y
def __add__(self, other):
return Vector(self.x + other.x, self.y + other.y)
def __str__(self):
return f"Vector({self.x}, {self.y})"
v1 = Vector(1, 2)
v2 = Vector(3, 4)
print(v1 + v2) # 输出 Vector(4, 6)
场景:
实现自定义类的加法、减法、索引访问等功能。
6. 类方法、静态方法、实例方法——“职责明确的三兄弟” 🧑🤝🧑
它是什么:
-
实例方法操作实例(最常见)。
-
类方法作用于类。
-
静态方法独立于实例和类。
它干嘛用:
-
实例方法:操作实例的属性。
-
类方法:操作类的共享数据。
-
静态方法:实现与类相关的通用工具。
案例:简单的电池工厂
class Battery:
brand = "Duracell" # 类变量
def __init__(self, capacity):
self.capacity = capacity # 实例变量
@classmethod
def change_brand(cls, new_brand):
cls.brand = new_brand
@staticmethod
def battery_info():
print("Battery is essential for energy storage!")
battery = Battery(3000)
Battery.change_brand("Energizer")
Battery.battery_info()
场景:
创建工厂方法、修改类属性、编写通用工具函数。
7. 上下文管理器(with 语句)——“自动打扫卫生” 🧹
它是什么:
上下文管理器用于自动管理资源,比如文件或数据库连接,防止资源泄漏。
它干嘛用:
替代手动打开/关闭的繁琐流程。
案例:写入文件
with open("test.txt", "w") as file:
file.write("Hello, Python!")
# 文件自动关闭
场景:
操作文件、网络连接、数据库事务等。
8. 多继承与super()——“复杂关系一键搞定” 😵
它是什么:
super()解决多继承中的方法调用顺序问题(MRO)。
它干嘛用:
适用于复杂的类继承结构。
案例:钻石继承问题
class A:
def greet(self):
print("Hello from A")
class B(A):
def greet(self):
print("Hello from B")
super().greet()
class C(A):
def greet(self):
print("Hello from C")
super().greet()
class D(B, C):
def greet(self):
print("Hello from D")
super().greet()
d = D()
d.greet()
场景:
设计复杂的类体系时,保持方法调用的有序性。
9. GIL(全局解释器锁)——“并发程序的绊脚石” 🔒
它是什么:
GIL限制了Python多线程无法真正并行。
它干嘛用:
需要优化CPU密集型任务时,要用多进程绕过GIL。
案例:模拟多线程
from threading import Thread
def worker():
for _ in range(1000000):
pass
threads = [Thread(target=worker) for _ in range(4)]
for t in threads:
t.start()
for t in threads:
t.join()
场景:
I/O密集型任务(多线程),CPU密集型任务(多进程)。
10. 元类(Metaclass)——“类的类” 🛠️
它是什么:
元类用于控制类的创建过程。
它干嘛用:
用于动态修改类,比如自动生成方法或属性。
案例:自动添加方法
class MyMeta(type):
def __new__(cls, name, bases, dct):
dct["greet"] = lambda self: print(f"Hello from {name}")
return super().__new__(cls, name, bases, dct)
class MyClass(metaclass=MyMeta):
pass
obj = MyClass()
obj.greet()
场景:
框架开发,比如Django ORM中的动态模型生成。
最后,我精心筹备了一份全面的Python学习大礼包,完全免费分享给每一位渴望成长、希望突破自我现状却略感迷茫的朋友。无论您是编程新手还是希望深化技能的开发者,都欢迎加入我们的学习之旅,共同交流进步!
🌟 学习大礼包包含内容:
Python全领域学习路线图:一目了然,指引您从基础到进阶,再到专业领域的每一步学习路径,明确各方向的核心知识点。
超百节Python精品视频课程:涵盖Python编程的必备基础知识、高效爬虫技术、以及深入的数据分析技能,让您技能全面升级。
实战案例集锦:精选超过100个实战项目案例,从理论到实践,让您在解决实际问题的过程中,深化理解,提升编程能力。
华为独家Python漫画教程:创新学习方式,以轻松幽默的漫画形式,让您随时随地,利用碎片时间也能高效学习Python。
互联网企业Python面试真题集:精选历年知名互联网企业面试真题,助您提前备战,面试准备更充分,职场晋升更顺利。
👉 立即领取方式:只需【点击这里】,即刻解锁您的Python学习新篇章!让我们携手并进,在编程的海洋里探索无限可能

1351

被折叠的 条评论
为什么被折叠?



