当前位置: 首页 > news >正文

Python高阶

1. 闭包

定义:双层嵌套函数, 内层函数可以访问外层函数的变量 将内存函数作为外层函数的返回,此内层函数就是闭包函数

通过闭包:

优点:

  • 不定义全局变量,也可以让函数持续访问和修改一个外部变量
  • 闭包函数引用的外部变量,是外层函数的内部变量。作用域封闭难以被误操作修改

缺点:额外的内存占用

 nonlocal关键字的作用:

  • 在闭包函数(内部函数中)想要修改外部函数的变量值
  • 需要用nonlocal声明这个外部变量

2. 装饰器

装饰器就是使用创建一个闭包函数,在闭包函数内调用目标函数。 可以达到不改动目标函数的同时,增加额外的功能。

@outer定义在目标函数上

func是被装饰的 函数

3. 设计模式

设计模式就是一种编程套路。 使用特定的套路得到特定的效果

单例模式

单例模式就是对一个类,只获取其唯一的类实例对象,持续复用它。

适用场景:当一个类只能有一个实例,而客户可以从一个众所周知的访问点访问它时。

优点:节省内存 节省创建对象的开销

工厂模式

工厂模式:将对象的创建由使用原生类本身创建 转换到由特定的工厂方法来创建

使用场景:当需要大量创建一个类的实例的时候, 可以使用工厂模式。

优点:

4. 多线程

进程线程合并执行

进程: 就是一个程序,运行在系统之上,那么便称之这个程序为一个运行进程,并分配进程ID方便系统管理。

线程:线程是归属于进程的,一个进程可以开启多个线程,执行不同的工作,是进程的实际工作最小单位。

操作系统中可以运行多个进程,即多任务运行

一个进程内可以运行多个线程,即多线程运行

并行执行:多个进程同时在运行,即不同的程序同时运行,称之为:多任务并行执行 一个进程内的多个线程同时在运行,称之为:多线程并行执行

多线程编程

 threading模块的使用

  • thread_obj = threading.Thread(target=func)  创建线程对象
  • thread_obj.start() 启动线程执行

eg:

需要传参的话可以通过:

  • args参数通过元组(按参数顺序)的方式传参
  • 或使用kwargs参数用字典的形式传参

5. 网络编程

服务器开发

socket: (简称 套接字) 是进程之间通信一个工具,进程之间想要进行网络通信需要socket。 Socket负责进程之间的网络数据传输。

2个进程之间通过Socket进行相互通讯,就必须有服务端和客户端

  • Socket服务端:等待其它进程的连接、可接受发来的消息、可以回复消息
  • Socket客户端:主动连接服务端、可以发送消息、可以接收回复

Socket服务端编程:

主要分为如下几个步骤:

1. 创建socket对象

2. 绑定socket_server到指定IP和地址

3.  服务端开始监听端口

4.  接收客户端连接,获得连接对象

5. 客户端连接后,通过recv方法,接收客户端发送的消息

6. 通过conn(客户端当次连接对象),调用send方法可以回复消息

7. conn(客户端当次连接对象)和socket_server对象调用close方法,关闭连接

实现服务端并结合客户端进行测试:

客户端开发

Socket客户端编程

主要分为如下几个步骤:

1. 创建socket对象

2. 连接到服务端

3. 发送消息

4. 接收返回消息

5. 关闭链接

6. 正则表达式

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

Python正则表达式,使用re模块,并基于re模块中三个基础方法来做正则匹配。 分别是:match、search、findall 三个基础方法。

基础匹配

  • re.match,从头开始匹配,匹配第一个命中项
  • re.search,全局匹配,匹配第一个命中项
  • re.findall,全局匹配,匹配全部命中项
re.match(匹配规则, 被匹配字符串)

从被匹配字符串开头进行匹配, 匹配成功返回匹配对象(包含匹配的信息),匹配不成功返回空。

search(匹配规则, 被匹配字符串)

搜索整个字符串,找出匹配的。从前向后,找到第一个后,就停止,不会继续向后

整个字符串都找不到,返回None

findall(匹配规则, 被匹配字符串)

匹配整个字符串,找出全部匹配项

找不到返回空list: []

元字符匹配

单字符匹配

示例:

字符串 s = “itheima1 @@python2 !!666 ##itcast3”

  • 找出全部数字: re.findall(r‘\d’, s)

字符串的r标记,表示当前字符串是原始字符串,即内部的转义字符无效而是普通字符

  • 找出特殊字符:

re.findall(r‘\W’, s)

  • 找出全部英文字母:

re.findall(r’[a-zA-Z]’, s)

[]内可以写:[a-zA-Z0-9] 这三种范围组合或指定单个字符如[aceDFG135]

数量匹配

边界匹配:

分组匹配:

7. 递归

递归: 即方法(函数)自己调用自己的一种特殊编程写法,即(函数调用自己,即称之为递归调用。

注意:

  • 注意退出的条件,否则容易变成无限递归
  • 注意返回值的传递,确保从最内层,层层传递到最外层

os模块的3个方法

  • os.listdir,列出指定目录下的内容
  • os.path.isdir,判断给定路径是否是文件夹,是返回True,否返回False
  • os.path.exists,判断给定路径是否存在,存在返回True,否则返回False
http://www.xdnf.cn/news/1273663.html

相关文章:

  • spring-boot-starter-data-redis 与 org.redisson 区别 联系
  • vue如何监听localstorage
  • 嵌入式开发学习(第三阶段第四天 Linux系统开发)
  • 复现论文《基于深度强化学习的微能源网能量管理与优化策略研究》
  • 【渲染流水线】[几何阶段]-[归一化NDC]以UnityURP为例
  • 【每天一个知识点】深度领域对抗神经网络
  • WPFC#超市管理系统(5)商品布局、顾客登录、商品下单
  • 【C++详解】红黑树规则讲解与模拟实现(内附红黑树插入操作思维导图)
  • ES 调优帖:Gateway 批量写入性能优化实践
  • C语言基础05——指针
  • 计算机视觉全景指南:从OpenCV预处理到YOLOv8实战,解锁多模态AI时代(第五章)
  • MVC结构变种——第三章核心视图及控制器的整体逻辑
  • 机器学习——TF-IDF 衡量词语在文档中重要程度
  • Java 日常开发笔记(小程序页面交互传参-id)
  • ​LabVIEW键盘鼠标监控
  • 分享一个基于Python和Hadoop的的电信客户特征可视化分析平台 基于Spark平台的电信客服数据存储与处理系统源码
  • 【Python练习】086. 编写一个函数,实现简单的DHCP服务器功能
  • 刑法视野下的虚拟财产属性争议:法律风险与市场潜力解析
  • Delphi 中的字符串类型 string 详解
  • 【0基础PS】PS工具详解--缩放工具
  • Beelzebub靶机攻略
  • 【Linux | 网络】数据链路层
  • PHP版本控制系统:高效文档管理
  • 从MySQL到大数据平台:基于Spark的离线分析实战指南
  • 5Python异常处理与模块导入全指南
  • 元数据管理与数据治理平台:Apache Atlas 分类传播 Classification Propagation
  • vue中使用h5plus
  • 【Elasticsearch入门到落地】16、RestClient查询文档-快速入门
  • Java Stream流详解:从基础语法到实战应用
  • spring-ai整合PGVector实现RAG