Python 好文收藏

2024-08-13  本文已影响0人  DebugWorld

Python 系统教程

Python 编程时光
Python3 菜鸟教程
廖雪峰 Python3 教程
《Python Cookbook》3rd Edition

基类必须重写和禁止重写

类方法的强制重写与禁止重写
在 Python 里面如何实现一个抽象类
如何让 Python 提醒你不能覆盖某个父类方法

Python 函数传参

Python 为什么会有命名关键字参数?

Python 变量

Python 就是这样设计的,它认为在函数体中,如果对变量有赋值操作,则证明这个变量是一个局部变量,并且它只会从局部变量中去读取数据。

Python不用声明变量吗?

Python 函数/方法

Python 中的 classmethod 和 staticmethod 有什么具体用途?
Python 实例方法、类方法、静态方法的区别与作用
Python函数接口的一些设计心得

yield

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 闭包

特点:

  1. 必须有一个内嵌函数
  2. 内嵌函数必须引用外部函数中的变量
  3. 外部函数的返回值必须是内嵌函数。

定义:

在计算机科学中,闭包(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解决局部变量赋值问题

应用:

  1. 装饰器
  2. 惰性求值(有一个基础值,然后其他数组里每个值都对这个基础值进行计算,map()可实现同样功能,只不过map是一个数组,闭包可以单独调用)
  3. 缓存计算:递归函数、动态规划

一步一步教你认识Python闭包
设计闭包(Closure)的初衷是为了解决什么问题?
如何通俗地解释闭包的概念?
闭包概念考证

Python 装饰器

定义:

装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。

应用场景:

它经常用于有切面需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等场景。装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码并继续重用。概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能。

实例:loguru + 反射 + 偏函数 + 装饰器 + 异常捕获(传参) + 运行时间

注意:

被装饰后的函数其实已经是另外一个函数了,Python的functools包中提供了一个叫wraps的decorator来消除这样的副作用,来保证被装饰器装饰后的函数还拥有原来的属性,functools.wraps通过partial以及update_wrapper来实现。functools.partial 偏函数,常用于修改源码函数默认值。传参装饰器需要两层嵌套函数

多个解释器执行顺序:

image.png

一篇文章搞懂装饰器所有用法
Python 装饰器装饰类中的方法
带可选参数的装饰器
没看完这11 条,别说你精通 Python 装饰器

Python 猴子补丁(Monkey Patch)

猴子补丁(Monkey Patch)就是在运行过程中动态修改一个类的方法或变量等

python面试题精讲——monkey patch(猴子补丁)

Python 继承

Python的方法解析顺序(MRO)

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()

Python 新特征

PEP572: 海象运算符

TCP三次握手四次挥手

三次握手,四次挥手

高并发

深度对比 Python 几种并发方案的优缺点

上一篇下一篇

猜你喜欢

热点阅读