2023/07/30

py 技巧

Python 进阶技巧与概念

参考视频: Bilibili - Python进阶

1. 闭包 (Closure)

闭包是一种特殊的函数,它由一个嵌套的函数结构组成,其中内层函数可以记住并访问其外层函数的变量,即使外层函数已经执行完毕。

  • 定义: 在一个外层函数中定义一个内层函数,并将这个内层函数作为返回值。

  • 优点:

    • 可以在不使用全局变量的情况下,让函数"记住"某个状态。

    • 变量的作用域被限制在函数内部,不易被外部代码意外修改。

  • 缺点:

    • 由于内部函数持续引用外部函数的变量,这部分内存不会被垃圾回收机制释放,可能导致内存占用。

nonlocal 关键字

如果需要在闭包的内部函数中修改外部函数的变量,必须使用 nonlocal 关键字声明。

输出:

2. 装饰器 (Decorator)

装饰器本质上也是一种闭包,它是一种强大的设计模式,允许我们在不修改目标函数源代码的前提下,为其增加额外的功能(如日志、计时、权限校验等)。

@timer_decorator 这行代码完全等价于 sleep_randomly = timer_decorator(sleep_randomly)

3. 设计模式 (Design Pattern)

设计模式是经过验证的、在特定场景下解决常见问题的编程“套路”或最佳实践。

单例模式 (Singleton)

确保一个类在整个应用程序中只有一个实例,并提供一个全局访问点来获取该实例。

  • 优点: 节省内存和创建对象的开销,确保全局状态的一致性。

  • 实现方式: 通常通过重写类的 __new__ 方法来实现。

输出:

工厂模式 (Factory)

提供一个统一的接口来创建一系列相关的对象,而无需指定它们具体的类。客户端通过工厂方法来请求对象,而不是直接使用类的构造函数。

  • 优点:

    • 将对象的创建逻辑与使用逻辑解耦,易于维护。

    • 当需要更换或添加新的产品类时,只需修改工厂内部逻辑,客户端代码无需变动。

输出:

4. Python 多线程

  • 进程 (Process): 操作系统进行资源分配和调度的基本单位,可以看作一个正在运行的程序。进程之间内存相互隔离

  • 线程 (Thread): 进程的实际工作单位,一个进程可以包含多个线程。同一进程内的线程共享该进程的内存空间。

  • 并行 (Parallelism): 同一时刻执行多个任务(需要多核CPU)。

  • 并发 (Concurrency): 在一段时间内交替执行多个任务,看起来像在同时执行(单核CPU即可实现)。

Python 的 threading 模块可以帮助我们实现多线程编程。

threading 模块基础

输出 (顺序可能不同):

5. Socket 通信

Socket(套接字)是实现进程间网络通信的工具。它分为服务端 (Server) 和客户端 (Client)。

Socket 服务端基础流程

  1. 创建 Socket 对象: socket.socket()

  2. 绑定 IP 和端口: socket_server.bind((host, port))

  3. 开始监听: socket_server.listen(backlog)

  4. 接受连接 (阻塞): conn, addr = socket_server.accept()

  5. 接收/发送数据: conn.recv(bufsize) / conn.send(data)

  6. 关闭连接: conn.close(), socket_server.close()

0 评论:

发表评论