【黑马程序员】Python高阶

文章目录

  • 闭包
    • 定义
    • nonlocal关键字作用
    • 优缺点
      • 优点
      • 缺点
    • 装饰器
      • 装饰器闭包写法
  • 设计模式
    • 单例模式
    • 工厂模式
      • 优点
      • 代码示例
  • 多线程
    • 基本概念
    • threading模块
  • 网络编程
    • 服务端开发
      • socket
      • socket服务端编程
    • 客户端开发
  • 正则表达式
    • 正则的三个基础方法
      • match
      • search
      • findAll
    • 元字符匹配
      • 单字符匹配
      • 数量匹配
      • 边界匹配
      • 分组匹配

闭包

定义

  • 定义双层嵌套函数,内层函数可以访问外层函数的变量
  • 将内层函数作为外层函数的返回,此内层函数就是闭包函数
  • 代码示例
def out_func1(label):def in_func1(msg):print(f'{label}{msg}{label}')return in_func1out = out_func1("边框")
out("hello")

nonlocal关键字作用

  • 在闭包函数修改外层函数的变量值
  • 代码示例
def outer_func(out_num):def in_func(in_num):# 修改外层变量nonlocal out_numout_num += in_numprint(out_num)return in_func

优缺点

优点

  • 无需定义全局变量即可实现通过此函数,持续的访问、修改某个值
  • 闭包使用的变量的作用域在函数内部,难以被错误的调用修改

缺点

  • 由于内部函数持续引用外部函数的值,所以会导致这一部分内存空间不被释放

装饰器

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

装饰器闭包写法

  • 定义一个闭包函数,在闭包函数内部
    • 执行目标函数
    • 完成功能的添加
  • 代码示例
# 装饰器语法糖写法
def outer1(func):def inner():print("start")func()print("end")return inner@outer1
def sleep1():import randomimport timeprint("sleep...")time.sleep(random.randint(1, 5))sleep1()

设计模式

单例模式

  • 一个类无论获取多少次类对象,都只提供一个具体的实例
  • 好处:节省创建类对象的开销和内存开销
  • 使用场景:当一个类只有一个实例,而客户可以从一个众所周知的访问节点访问它
  • 代码示例
# 在一个文件中定义要实现单例的类
# *_*coding:utf-8 *_*class StrTools:passstr_tools = StrTools()# 在另一个文件中导入单例对象
# *_*coding:utf-8 *_*
from 单例模式 import str_toolss1 = str_tools
s2 = str_tools
print(s1)
print(s2)

工厂模式

优点

  • 大批量创建对象的时候有统一的入口,易于代码维护
  • 当发生修改,进修改工厂类的创建方法即可
  • 符合现实世界的模式,即由工厂来制作产品

代码示例

# *_*coding:utf-8 *_*
class Person:passclass Worker(Person):passclass Sturent(Person):passclass Teacher(Person):passclass Factory:def get_person(self, p_type):if p_type == 'w':return Worker()elif p_type == 's':return Sturent()else:return Teacher()factor = Factory()
worler = factor.get_person('w')
student = factor.get_person('s')
teacher = factor.get_person('t')

多线程

基本概念

  • 进程:程序在操作系统内运行,即成为一个运行进程
  • 线程:进程内部可以有多个线程,程序的运行本质上是由进程内部的线程在实际工作的
  • 并行执行
    • 多个进程同时在运行,即不同的程序同时运行,称之为:多任务并行执行
    • 一个进程内的多个线程同时在运行,称之为:多线程并行执行

threading模块

  • Python的多线程可以通过threading模块来实现
  • 语法
import threadingthread_obj = threading.Thread([group[, target[, name[, args[, kwargs]]]]])
group:预留参数,暂未使用
target:执行的目标任务名
args:以元组的方式给执行任务传参
kwargs:以字典的方式给执行任务传参
name:线程名,一般不设置# 启动线程
thread_obj.start()
  • 代码示例
# *_*coding:utf-8 *_*import time
import threadingdef sing(msg):while True:print(f"{msg}")time.sleep(1)def dance(msg):while True:print(f'{msg}')time.sleep(1)if __name__ == '__main__':# 创建一个sing线程,通过元组方式传参sing_thread_obj = threading.Thread(target=sing, args=("sing sing sing",))# 创建一个dance线程,通过字段方式传参dance_thread_obj = threading.Thread(target=dance, kwargs={"msg": "dance dance dance"})# 启动两个线程sing_thread_obj.start()dance_thread_obj.start()

网络编程

服务端开发

socket

  • socket是进程之间的一个通信工具,socket负责进程之间的网络数据传入
  • socket服务端:等到其它进程的连接、可接受发来的消息,可以回复消息
  • socket客户端:主动连接服务端、可以发送消息,可以接收消息

socket服务端编程

  • 步骤
    • 创建socket对象
    • 绑定socket_server到指定IP和地址
    • 服务端开始监听端口
    • 接收客户端连接,获取连接对象
    • 客户端连接后,通过recv方法,接收客户端发送的消息
    • 通过conn,调用send方法可以回复消息
    • conn和socket_server对象调用close方法关闭连接
  • 代码示例
# *_*coding:utf-8 *_*
import socket# 创建socket对象
socket_servre = socket.socket()
# 绑定socket_server到指定IP和地址
socket_servre.bind(("127.0.0.1", 9000))
# 服务端开始监听端口,参数表示允许的链接数量,超出会等待,可以不填,不填会自动设置一个合理值
socket_servre.listen(10)
# 接收客户端连接,获得连接对象,accept是阻塞方法
# conn为客户端和服务端的连接对象
# addr为客户端的地址信息
conn, addr = socket_servre.accept()
print(f'Accept,address:{addr}')
# 客户端连接后,通过recv方法,接收客户端发送的消息
while True:# recv方法的返回值是字节数组(Bytes),可以通过decode使用UTF-8解码为字符串# recv方法的传参是buffsize,缓冲区大小data = conn.recv(1024).decode("UTF-8")if data == 'exit':breakprint(f'接收到发送的数据:{data}')# 将字符串编码为字节数组对象conn.send(input('输入要回复给客户端的信息:').encode("UTF-8"))
conn.close()
socket_servre.close()

客户端开发

  • 步骤
    • 创建socket对象
    • 连接到服务端
    • 发送消息
    • 接收返回消息
    • 关闭连接
  • 代码示例
# *_*coding:utf-8 *_*
import socket# 创建socket对象
socket_client = socket.socket()
# 连接到服务端
socket_client.connect(('127.0.0.1', 9000))
# 发送消息
while True:send_msg = input("请输入要发送的消息:")if send_msg == 'exit':break# 将字符串转化为字节数组socket_client.send(send_msg.encode('UTF-8'))# 接收返回消息recv_data = socket_client.recv(1024).decode('UTF-8')print(f'服务端回复的消息:{recv_data}')# 关闭客户端连接
socket_client.close()

正则表达式

正则的三个基础方法

  • Python正则表达式,使用re模块,并基于match、search、findall来做正则匹配

match

  • 语法:re.match(匹配规则,被匹配的字符串)
  • 从被匹配字符串开头进行匹配,匹配成功返回匹配对象,匹配不成功返回空
  • 特点:从头开始匹配
  • 代码示例
# *_*coding:utf-8 *_*
import re# 从开头开始匹配,如果开头都不匹配直接返回None
# 匹配成功
s = "python itheima python itheima python itheima"
result = re.match('python', s)
print(result)
# span 匹配成功所在的字符串下标
print(result.span())
# 匹配成功的值是什么
print(result.group())# 匹配不成功
s1 = "1python itheima python itheima python itheima"
result = re.match('python', s1)
print(result)

search

  • 语法:search(匹配规则, 被匹配字符串)
  • 功能:搜索整个字符串,找出匹配的。从前向后,找到第一个后,就停止,不会继续向后
  • 特点:只匹配一个
  • 代码示例
# *_*coding:utf-8 *_*
import re# 匹配不成功
s1 = "1python itheima python itheima python itheima"
result = re.search('python', s1)
print(result)
# span找到后的下标位置
print(result.span())
# 找到后匹配的字符串
print(result.group())

findAll

  • 语法:findall(匹配规则, 被匹配字符串)
  • 功能:匹配整个字符串,找出全部匹配项,找不到返回空list
  • 代码示例
# *_*coding:utf-8 *_*
import re# 匹配不成功
s1 = "1python itheima python itheima python itheima"
result = re.findall('python', s1)
print(result)

元字符匹配

单字符匹配

在这里插入图片描述

数量匹配

在这里插入图片描述

边界匹配

在这里插入图片描述

分组匹配

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/755668.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录算法训练营第二十五天|● 216.组合总和III ● 17.电话号码的字母组合(JS写法)

216 组合总和Ⅲ 题目链接/文章讲解:https://programmercarl.com/0216.%E7%BB%84%E5%90%88%E6%80%BB%E5%92%8CIII.html 视频讲解:https://www.bilibili.com/video/BV1wg411873x 方法一:自己写的 自己写的,本题和77很像&#xf…

Redis数据结构对象之集合对象和有序集合对象

集合对象 集合对象的编码可以是intset或者hashtable. 概述 intset编码的集合对象使用整数集合作为底层实现,集合对象包含的所有元素都被保存在整数集合里面。 另一方面,hashtable编码的集合对象使用字典作为底层实现,字典的每个键都是一个…

web部署 四 限制

案例: 1/设置其下载速度限制:1000000010m,10000001m,2分别查看下载速率是否发生变化。 2/限制连接数,同时下载5个文件。查看第6个是否能正常访问。使用命令符:netstat-n,查看活动链接, 正常情况下我们的下载速度 我们…

遥感深度学习:CNN-LSTM模型用于NDVI的预测(Pytorch代码深度剖析)

代码上传至Github库:https://github.com/ChaoQiezi/CNN-LSTM-model-is-used-to-predict-NDVI 01 前言 这是一次完整的关于时空遥感影像预测相关的深度学习项目,后续有时间更新后续部分。 通过这次项目,你可以了解: pytroch的模…

石油炼化5G智能制造工厂数字孪生可视化平台,推进行业数字化转型

石油炼化5G智能制造工厂数字孪生可视化平台,推进行业数字化转型。在石油炼化行业,5G智能制造工厂数字孪生可视化平台的出现,为行业的数字化转型注入了新的活力。石油炼化行业作为传统工业的重要领域,面临着资源紧张、环境压力、安…

蓝桥杯练习题——健身大调查

在浏览器中预览 index.html 页面效果如下: 目标 完成 js/index.js 中的 formSubmit 函数,用户填写表单信息后,点击蓝色提交按钮,表单项隐藏,页面显示用户提交的表单信息(在 id 为 result 的元素显示&#…

OxyPlot 导出图片

在 OxyPlot 官方文档 https://oxyplot.readthedocs.io/en/latest/export/index.html 中查看 这里用到的是导出到 PNG 文件的方法,不过用的 NuGet 包最新版(2.1.0)中,PngExporter 中并没有 Background 属性: 所以如果图…

【C语言】C语言内存函数

👑个人主页:啊Q闻 🎇收录专栏:《C语言》 🎉道阻且长,行则将至 前言 这篇博客是关于C语言内存函数(memcpy,memmove,memset,memcmp)的使用以及部分的模拟实现 memcpy,memmove,memset,memc…

一文搞懂“ReentrantReadWriteLock——读写锁”

文章目录 初识读写锁ReentrantReadWriteLock类结构注意事项 ReentrantReadWriteLock源码分析读写状态的设计HoldCounter 计数器读锁的获取读锁的释放写锁的获取写锁的释放 锁降级 初识读写锁 Java中的锁——ReentrantLock和synchronized都是排它锁,意味着这些锁在同…

docker安装配置dnsmasq

docker下载安装 参考:docker安装、卸载、配置、镜像 如果是低版本的额ubuntu,比如ubuntu16.04.7 LTS,为了加快下载速度,参考:Ubuntu16.04LTS安装Docker。 docker安装dnsmasq 下载dnsmasq镜像 首先镜像我们可以选择…

代码随想录 动态规划-完全背包问题

52. 携带研究材料 时间限制:1.000S 空间限制:128MB 题目描述 小明是一位科学家,他需要参加一场重要的国际科学大会,以展示自己的最新研究成果。他需要带一些研究材料,但是他的行李箱空间有限。这些研究材料包括实验…

Could not locate zlibwapi.dll. Please make sure it is in your library path!

背景 运行PaddleOCR时,用的CUDA11.6配的是cuDNN8.4。但是运行后却报错如下。 解决手段 去网上找到这两个文件,现在英伟达好像不能下载了,但是可以去网盘下载。然后把dll文件放入CUDA11.6文件下的bin目录,而lib文件放入CUDA11.6文…

基于 RisingWave 和 Kafka 构建实时网络安全解决方案

实时威胁检测可实时监控和分析数据,并及时对潜在的安全威胁作出识别和响应。与依赖定期扫描或回顾性分析的安全措施不同,实时威胁检测系统可提供即时警报,并启动自动响应来降低风险,而不会出现高延迟。 实时威胁检测有许多不同的…

英特尔生态的深度学习科研环境配置-A770为例

之前发过在Intel A770 GPU安装oneAPI的教程,但那个方法是用于WSL上。总所周知,在WSL使用显卡会有性能损失的。而当初买这台机器的时候我不在场,所以我这几天刚好有空把机器给重装成Ubuntu了。本篇不限于安装oneAPI,因为在英特尔的…

【01】htmlcssgit网络基础知识

一、html&css 防脱发神器 一图胜千言 使用border-box控制尺寸更加直观,因此,很多网站都会加入下面的代码 * {margin: 0;padding: 0;box-sizing: border-box; }颜色的 alpha 通道 颜色的 alpha 通道标识了色彩的透明度,它是一个 0~1 之间的取值,0 标识完全透明,1…

探索什么便签软件好用,可以和手机同步的便签软件

在信息技术日新月异的今天,各类数字工具已经成为我们生活与工作的重要助手。便签软件作为一种简单却高效的辅助工具,悄然改变着人们的记录习惯与时间管理方式。而在诸多便签软件中,能够实现手机与电脑同步功能的产品尤显其独特的价值。那么&a…

数据结构 之 哈希表习题 力扣oj(附加思路版)

哈希表用法 哈希表&#xff1a;键 值对 键&#xff1a;可以看成数组下标&#xff0c;但是哈希表中的建可以是任意类型的&#xff0c;建不能重复,可以不是连续的 值&#xff1a;可以看成数组中的元素&#xff0c;值可以重复&#xff0c;也可以是任意类型的数据 #include<iost…

R语言程序设计(零基础速通R语言语法和常见函数的使用)

目录 1.Rstudio中的一些快捷键 2.R对象的属性 3.R语言中常用的运算符​编辑 4.R的数据结构 向量 如何建立向量&#xff1f; 如何从向量里面提取元素&#xff1f; 矩阵 如何建立矩阵&#xff1f; 如何从矩阵里面提取元素&#xff1f; 数据框 如何建立数据框&#xf…

python-pandas基础学习

可参考&#xff1a; pandas&#xff1a;http://pandas.pydata.org/docs/user_guide/10min.html 一、基础知识 DataFrame 方法&#xff0c;可以将一组数据&#xff08;ndarray、series, map, list, dict 等类型&#xff09;转化为表格型数据 import pandas as pd data {name: …

前端三件套 | 综合练习:模拟抽奖活动,实现一个简单的随机抽取并显示三名获胜者

随机运行结果如下&#xff1a; 参考代码如下&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><tit…