# 闭包

# 定义

在函数嵌套的前提下,内部函数使用了外部函数的变量,并且外部函数返回了内部含糊,我们将这个使用外部函数变量的内部函数称之为闭包

image-20230429131934545

# 修改外部函数变量的值

def outer(num1):
    def inner(num2):
        nonlocal num1
        num1 += num2
        print(num1)
    return inner
fn = outer(10)
fn(10)

# 装饰器

# 定义

装饰器其实也是一种闭包,其功能就是在不破坏目标函数原有代码和功能前提下,为目标函数增加新功能

# 代码

def outer(func):
    def inner():
        print("我要睡觉了")
        func()
        print("我起床了")
    return inner
@outer
def sleep():
    import random
    import time
    print("睡眠中...")
    time.sleep(random.randint(1, 5))
sleep()

# 设计模式

# 定义

  1. 设计模式是一种编程的套路,可以极大的方便我们程序的开发
  2. 常见设计模式:单例、工厂模式,建造者、责任链、备忘录、解释器、访问者、观察者、中介、模板、代理模式

# 单例模式

# 单例模式介绍

  1. 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在
  2. 定义:保证一个类只有一个实例对象,并提供一个访问它的全局访问点
  3. 适用场景:当一个类只能有一个实例,而客户可以从一个众所周知的范围跟点访问它

# 实现

# 在一个文件中定义代码

class StrTools:
    pass
str_tool = StrTools()

# 在另一文件中导入对象

from test import str_tool
s1 = str_tool
s2 = str_tool
print(s1)
print(s2)
# s1 和 s2 为同一对象

# 工厂模式

# 工厂模式介绍

  1. 适用工厂类的 get_person () 方法取创建类对象
  2. 大批量创建对象的时候有统一入口,易于代码维护
  3. 当发生修改,仅修改工厂类的创建方法即可
  4. 符合现实世界模式,即由工厂来制作产品(对象)

# 实现

class Person:
    pass
class Worker(Person):
    pass
class Student(Person):
    pass
class Teacher(Person):
    pass
class PersonFactory:
    def get_person(self, p_type):
        if p_type == 'w':
            return Worker()
        elif p_type == 's':
            return Student()
        else:
            return Teacher()
pf = PersonFactory()
worker = pf.get_person('w')
student = pf.get_person('s')
teacher = pf.get_person('t')

# 多线程

# 进程、线程

  1. 进程:就是一个程序,运行在系统之上,那么称这个程序,并分配进程 ID 方便系统管理
  2. 线程:线程是归属于进程的,一个进程可以开启多个线程,执行不同的工作,是进程的实际工作最小单位
  3. 进程之间是内存隔离的,即不同的进程拥有各自的内存空间
  4. 线程之间是内存共享的,线程是属于进程的,一个进程内的多个线程之间是共享这个进程所拥有的内存空间

image-20230429144058858

# 并行执行

  1. 并行执行的意思指的是同一实践做不同的工作
  2. 进程之间就是并行执行,操作系统可以同时运行好多程序,这些程序都是在并行执行

# 多线程编程

import time
import threading
def sing(msg):
    while True:
        print(msg)
        time.sleep(1)
def dance():
    while True:
        print(msg)
        time.sleep(1)
if __name__ == '__main__':
    sing_thread = threading.Thread(target=sing, args=("sing"))
    dance_thread = threading.Thread(target=dance, kwargs={"msg": "dance"})
    sing_thread.satrt()
    dance_thread.start()

# 网络编程

# 服务端开发

# Socket

  1. Socket(套接字)是进程之间通信的一个工具,进程之间想要通信需要适用 socket
  2. Socket 服务端:等待其它进程的连接、可接受发来的 i 西澳西,可以恢复消息
  3. Socket 客户端:主动连接服务器,可以发送消息,可以接受回复

# 实现步骤

  1. 创建 socket 对象
  2. 绑定 socket_server 到指定 IP 和地址
  3. 服务端开始监听端口
  4. 接受客户端连接,获取连接对象
  5. 客户端连接后,通过 revc 方法,接受客户端发送的消息
  6. 通过 conn(客户端当次连接对象),调用 send 方法可以回复消息
  7. conn(客户端当次连接对象)和 socket_server 对象调用 close () 方法,关闭连接

# 客户端开发

# 实现步骤

  1. 创建 socket 对象
  2. 连接到服务器
  3. 发送消息
  4. 接受返回消息
  5. 关闭链接

# 正则表达式

# 定义

正则表达式,又称为规则表达式(Regular Expression),是使用单个字符串来描述,匹配某个句法规则的字符串,常被用来检索、替换哪些符合某个模式的文本

# re 模块三个方法

  1. re.match ,从头开始匹配,匹配第一个命中项
  2. re.search ,全局匹配,匹配第一个命中项
  3. re.findall ,全局匹配,匹配全部命中项

# 元字符匹配

# 单字符匹配

字符 功能
. 匹配任意 1 个字符
[] 匹配 [] 中列举的字符
\d 匹配数字,即 0-9
\D 匹配非数字
\s 匹配空白,即空格,tab 键
\S 匹配非空白
\w 匹配单词字符,a-z、A-Z、0-9、_
\W 匹配非单词字符

# 数量匹配

字符 功能
* 匹配前一个规则的字符出现 0 至无数次
+ 匹配后一个规则的字符出现 1 至无数次
? 匹配前一个规则的字符出现 0 次或 1 次
匹配前一个规则的字符出现 m 次
匹配前一个规则的字符出现最少 m 次
匹配前一个规则的字符出现 m 到 n 次

# 边界匹配

字符 功能
^ 匹配字符串开头
$ 匹配字符串结尾
\b 匹配一个单词的边界
\B 匹配非单词的边界

# 分组匹配

字符 功能
| 匹配左右任意一个表达式
() 将括号中字符作为一个分组

# 递归

# 定义

  1. 递归在编程中是一种非常重要的算法
  2. 递归:即方法(函数)自己调用自己的一种特殊编程写法
更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

Baozi 微信支付

微信支付

Baozi 支付宝

支付宝

Baozi 微信

微信