Python 系统教程
Python 编程时光
Python3 菜鸟教程
廖雪峰 Python3 教程
《Python Cookbook》3rd Edition
基类必须重写和禁止重写
类方法的强制重写与禁止重写
在 Python 里面如何实现一个抽象类
如何让 Python 提醒你不能覆盖某个父类方法
Python 函数传参
Python 变量
Python 就是这样设计的,它认为在函数体中,如果对变量有赋值操作,则证明这个变量是一个局部变量,并且它只会从局部变量中去读取数据。
Python 函数/方法
Python 中的 classmethod 和 staticmethod 有什么具体用途?
Python 实例方法、类方法、静态方法的区别与作用
Python函数接口的一些设计心得
yield
暂停程序的执行并保存运行状态
- 大数据量的生成,但不可复用
- 简化代码结构,一个函数使用yield,通过for不断的调用另外一个函数
- 协程与并发的业务场景中
def f():
for i in range(3):
print("伪代码块1")
yield i # 也可以通过 list().append(i), 最后return,但是需要整个函数运行结束才可以运行代码块3,如果数据量很大也会影响效率
# 也可以在这运行 print(f"伪代码块3: {i}"),但是代码块3就和函数 f() 就高度耦合了,其他调用方是不需要代码块3的
print("伪代码块2 \n") # 也可以把 代码块2 放到函数外面,但是有时候代码块2就是和函数 f() 或者代码块1有耦合的,必须要放在这里。
for n in f():
print(f"伪代码块3: {n}")
Python 闭包
特点:
- 必须有一个内嵌函数
- 内嵌函数必须引用外部函数中的变量
- 外部函数的返回值必须是内嵌函数。
定义:
在计算机科学中,闭包(Closure) 是词法闭包(Lexical Closure)的简称,是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。所以,有另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体。
def f(x):
z = x ** 2 + x + 1
print('z is {}'.format(z))
def helper(y):
return y * z
return helper
g = f(1)
print(g(2) + g(1))
一般情况下,函数中的局部变量仅在函数的执行期间可用,一旦 f() 执行过后,我们会认为 z变量将不再可用。然而,在这里我们发现 f 执行完之后,在调用 g 的时候 z 变量的值正常输出了,这就是闭包的作用,闭包使得局部变量在函数外被访问成为可能。
闭包避免了使用全局变量,此外,闭包允许将函数与其所操作的某些数据(环境)关连起来。这一点与面向对象编程是非常类似的,在面对象编程中,对象允许我们将某些数据(对象的属性)与一个或者多个方法相关联。
注意: 通过nonlocal解决局部变量赋值问题
应用:
- 装饰器
- 惰性求值(有一个基础值,然后其他数组里每个值都对这个基础值进行计算,map()可实现同样功能,只不过map是一个数组,闭包可以单独调用)
- 缓存计算:递归函数、动态规划
一步一步教你认识Python闭包
设计闭包(Closure)的初衷是为了解决什么问题?
如何通俗地解释闭包的概念?
闭包概念考证
闭包的特性
延迟绑定:闭包中的变量会在闭包执行时绑定到当前值,而不是在闭包创建时。
变量持久化:闭包可以记住外部函数中的变量,即使外部函数已经返回。
Python 装饰器
定义:
装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。
应用场景:
它经常用于有切面需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等场景。装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码并继续重用。概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能。
实例:loguru + 反射 + 偏函数 + 装饰器 + 异常捕获(传参) + 运行时间
注意:
被装饰后的函数其实已经是另外一个函数了,Python的functools包中提供了一个叫wraps的decorator来消除这样的副作用,来保证被装饰器装饰后的函数还拥有原来的属性,functools.wraps通过partial以及update_wrapper来实现。functools.partial 偏函数,常用于修改源码函数默认值。传参装饰器需要两层嵌套函数。
多个解释器执行顺序:
一篇文章搞懂装饰器所有用法
Python 装饰器装饰类中的方法
带可选参数的装饰器
没看完这11 条,别说你精通 Python 装饰器
Python 猴子补丁(Monkey Patch)
猴子补丁(Monkey Patch)就是在运行过程中动态修改一个类的方法或变量等
- 在运行时替换方法、属性等
- 在不修改第三方代码的情况下增加原来不支持的功能
- 在运行时为内存中的对象增加patch而不是在磁盘的源代码中增加
python面试题精讲——monkey patch(猴子补丁)
Python 继承
Python 断言
Python 异常处理的哲学
Python 工匠: 异常处理的三个好习惯
python异常处理的哲学
raise是更好的return
错误码设计
Python 上下文管理器
深刻理解上下文管理器
深入理解 Python 中的上下文管理器
Python进阶:With语句和上下文管理器ContextManager
Python中的上下文管理器和装饰器之间的区别
每次用上下文都需要 with 调用,而且 上下文可以调用多个函数
class Resource(object):
"""
自建上下文管理器
"""
def __init__(self, n):
self.n = n
def __enter__(self):
print('===connect to resource===')
return self
def __exit__(self, exc_type, exc_val, exc_tb):
print('===close resource connection===')
def operate(self):
print('===in operation===')
def run(self):
self.n()
def f():
print("代码主体运行")
with Resource(f) as res:
res.operate()
res.run()