2024速通python之python高阶技巧

文章目录

  • 一、闭包
    • 1.什么是闭包
    • 2.优缺点
    • 3.nonlocal关键字
  • 二、装饰器
    • 1.什么是装饰器
    • 2.举例
    • 3.传统方式
    • 4.装饰器方式
    • 5.语法糖写法
  • 三、多线程
    • 1.线程参数
    • 2.多线程编程
  • 四、网络编程
    • 1.Socket服务端编程
    • 2.Socket客户端编程

「章节总览」
 
      【2024速通python之python基础 https://blog.csdn.net/weixin_45404884/article/details/138578955】
      【2024速通python之python进阶 https://blog.csdn.net/weixin_45404884/article/details/138663338】
      【2024速通python之python高阶 https://blog.csdn.net/weixin_45404884/article/details/138810133】
      【2024速通python之python面向对象https://blog.csdn.net/weixin_45404884/article/details/139473507】
      【2024速通python之python高阶技巧https://blog.csdn.net/weixin_45404884/article/details/139521584】

一、闭包

1.什么是闭包

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

这里的inner就是闭包函数,如果需要修改外层函数的outerNum变量,则需要用nonlocal关键字来声明

def outer(outerNum):def inner(innerNum):nonlocal outerNumouterNum = outerNum + 1print(f"Inner function num is {innerNum} and outer function num is {outerNum}")return innerout = outer(100)
out(200)

2.优缺点

  • 优点,使用闭包可以让我们得到:
    无需定义全局变量即可实现通过函数,持续的访问、修改某个值
    闭包使用的变量的所用于在函数内,难以被错误的调用修改

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

3.nonlocal关键字

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

二、装饰器

1.什么是装饰器

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

2.举例

将下面的睡觉函数,在调用sleep前后输出,“我打算睡觉了”、“我起床了”

def sleep():time.sleep(2)print("睡眠中....")sleep()

3.传统方式

def sleep():time.sleep(2)print("睡眠中....")print("我打算睡觉了")
sleep()
print("我起床了")

4.装饰器方式

def sleep():time.sleep(2)print("睡眠中....")def outer(func):def inner():print("我打算睡觉了")func()print("我起床了")return innerfn = outer(sleep)
fn()

5.语法糖写法

简化了调用,增加@outer注解在调用方法上,相当于java中为某个方法增加切面

def outer(func):def inner():print("我打算睡觉了")func()print("我起床了")return inner@outer
def sleep():time.sleep(2)print("睡眠中....")sleep()

三、多线程

1.线程参数

Python的多线程可以通过threading模块来实现。

  • target:执行的目标任务名称
  • args:以元组的方式给执行任务传参
  • name:线程名
  • daemon:是否设置为守护线程
  • kwargs:以字典方式传参

2.多线程编程

def sing(msg):print(f"我在唱歌。。。{msg}")def dance(msg):print(f"我在跳舞。。。{msg}")import threadingthread_obj1 = threading.Thread(target=sing, args=('开心!',), name='sing')thread_obj2 = threading.Thread(target=dance, args=('快乐!',), name='dance')thread_obj1.start()
thread_obj2.start()

四、网络编程

1.Socket服务端编程

主要分为如下几个步骤:

  • 创建socket对象
  • 绑定socket_server到指定IP和地址
  • 服务端开始监听端口
  • 接收客户端连接,获得连接对象
  • 客户端连接后,通过recv方法,接收客户端发送的消息
  • 通过conn(客户端当次连接对象),调用send方法可以回复消息
  • conn(客户端当次连接对象)和socket_server对象调用close方法,关闭连接

代码示例:

import socketsocket_server = socket.socket()
socket_server.bind(('127.0.0.1', 8888))
socket_server.listen()conn, addr = socket_server.accept()
print('Connected by', addr)
while True:data = conn.recv(1024).decode('utf-8')if data == 'exit':breakprint(f"接收到的客户端数据: {data}")conn.send("你好,我是服务端".encode('utf-8'))conn.close()
socket_server.close()

2.Socket客户端编程

主要分为如下几个步骤:

  • 创建socket对象
  • 连接到服务端
  • 发送消息
  • 接收返回消息
  • 关闭链接

代码示例:

import socketsocket_client = socket.socket()
socket_client.connect(('127.0.0.1', 8888))while True:send_msg = input("输入要发送的消息:")if send_msg == "exit":breaksocket_client.send(send_msg.encode("utf-8"))recv_msg = socket_client.recv(1024)print("服务端回复的消息:", recv_msg.decode("utf-8"))socket_client.close()

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

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

相关文章

超过20W个高质量组件的开源PCB库

项目介绍 Celestial Altium Library是由Altium行业专家Mark Harris创建的一个庞大的免费开源数据库库,专为Altium Designer而设计,库中包含超过20万个优质组件 . 特点 高质量数据:Celestial Altium Library注重数据的质量,用户可…

Day14:响应式网页

通过媒体查询、Bootstrap 框架完成腾讯全端网页响应式布局。 一、响应式布局方案 1、什么是响应式布局 它的主要特点是能够使网页根据不同的设备屏幕尺寸(如桌面电脑、平板电脑、手机等)和分辨率自动调整布局和显示效果,以提供最佳的用户体…

python的plt.axis()、plt.xlim() 和 plt.ylim()函数

坐标轴相关设置1、plt.axis():坐标轴设置 函数 plt.axis(*v, **kwargs) 主要用于设置坐标轴的属性,返回值为当前的坐标轴范围 [xmin, xmax, ymin, ymax],几种调用方式如下: 调用方式 说明 axis() 返回当前的坐标轴范围 [xmin, xmax, ymi…

pytorch构建模型训练数据集

pytorch构建模型训练数据集 pytorch构建模型训练数据集1.AlexNet:1.1.导入必要的库:1.2.数据预处理和增强:1.3.加载数据集:1.4.划分测试集和训练集:1.5.创建数据加载器:1.6.加载AlexNet模型:1.7.修改模型以…

qt qDebug兼容LOGE

目录 普通qDebug用法 qt qDebug兼容LOGE 模板参数2实现 qDebug 实现LOGE一样的用法,这样Android和qt同时支持LOGE打印日志 普通qDebug用法 #include <QApplication> #include <QDebug>int main(int argc, char *argv[]) {QApplication app(argc, argv);int ret…

帝国cms接入腾讯云人脸识别认证代码

利用帝国cms在做一些会员系统的时候&#xff0c;需要做人脸识别认证&#xff0c;之前接入了某api接口&#xff0c;发现身份证识别率真的低&#xff0c;还好充值的少&#xff0c;否则要出问题&#xff0c;后来发现会员注册率降低了不少&#xff0c;最终还是决定使用腾讯云的人脸…

三十五篇:数字化转型的引擎:赋能企业的ERP系统全景

数字化转型的引擎&#xff1a;赋能企业的ERP系统全景 1. 引言 在这个快速变化的数字时代&#xff0c;现代企业面临着前所未有的挑战和机遇。企业资源计划&#xff08;ERP&#xff09;系统&#xff0c;作为数字化转型的核心&#xff0c;扮演着至关重要的角色。它不仅是企业运营…

第二十六章HTML与CSS书写规范

1.HTML书写规范 1.文档类型声明及编码 统一为html5 声明类型。编码统一为utf-8。 2.页面tdk TDK是一个缩写&#xff0c;其中“T”表示为网页定义标题&#xff0c;“D”表示为网页定义描述 description&#xff0c;“K”表示为搜索引擎定义关键词keywords。 1、<title&g…

NFT Insider #133:苏富比将拍卖BAYC系列NFT,Taiko创世NFT系列已上线

引言&#xff1a;NFT Insider由NFT收藏组织WHALE Members &#xff08;https://twitter.com/WHALEMembers&#xff09;、BeepCrypto &#xff08;https://twitter.com/beep_crypto&#xff09;联合出品&#xff0c;浓缩每周NFT新闻&#xff0c;为大家带来关于NFT最全面、最新鲜…

立创·天空星开发板-GD32F407VE-EXTI

本文以 立创天空星开发板-GD32F407VET6-青春版 作为学习的板子&#xff0c;记录学习笔记。 立创天空星开发板-GD32F407VE-EXTI 中断硬件触发中断示例软件触发中断示例 中断 中断分为内部中断和外部中断 外部中断是由外部设备&#xff08;如按键、传感器、通信接口等&#xff09…

rollup.js(入门篇)

前沿 Rollup 是一个用于 JavaScript 的模块打包工具&#xff0c;它将小的代码片段编译成更大、更复杂的代码&#xff0c;例如库或应用程序。它使用 JavaScript 的 ES6 版本中包含的新标准化代码模块格式&#xff0c;而不是以前的 CommonJS 和 AMD 等特殊解决方案。ES 模块允许…

如何在Python中处理时间和日期

在Python中处理时间和日期&#xff0c;我们通常使用内置的datetime模块。这个模块提供了类来操作日期和时间&#xff0c;包括date、time、datetime、timedelta以及tzinfo。以下是datetime模块的一些基本用法&#xff1a; 1. 获取当前日期和时间 python复制代码 from datetime…

Linux编程for、while循环if判断以及case语句用法

简介 语法描述if条件语句if else条件判断语句if else-if else多条件判断语句for循环执行命令while循环执行命令until直到条件为真时停止循环case ... esac多选择语句break跳出循环continue跳出当前循环 1. for 循环 for语句&#xff0c;定量循环&#xff0c;可以遍历一个列表…

一文读懂AI时代GPU的内存新宠-HBM

一文读懂GPU最强辅助&#xff1a;HBM HBM&#xff0c;即高带宽内存&#xff0c;是一项领先的3D堆叠DRAM技术&#xff0c;专为高性能计算和图形处理单元&#xff08;GPU&#xff09;设计&#xff0c;满足其对内存带宽和容量的极致需求。该技术由AMD与海力士携手研发&#xff0c;…

Apache安装教程

目录 一、Apache知识点 Apache服务简介 Apache下载网址 Apache的主要特点 二、Apache服务的搭建 1. 关闭防火墙 2. 安装依赖环境以及编译工具 3. 将apache安装包拖入xshell内 4. 解压压缩包 5. 进入httpd主包 6. 指定安装路径&#xff0c;启用字符集支持等 7. 优化执…

重庆工商大学社会工作专业试题及答案,分享几个实用搜题和学习工具 #媒体#学习方法#知识分享

搜题软件一般都是通过识别题目内容搜索出问题的答案&#xff0c;当识别内容不正确或搜索不到答案时&#xff0c;又得重新到其他软件进行重复的操作&#xff0c;很是麻烦。所以我们可以使用专业的识别工具&#xff0c;对题目内容进行识别&#xff0c;然后把提取出来的内容单独保…

流量录制学习

AREX Cloud | AREX (arextest.com) 流量录制学习&#xff0c;比vivo的moonbox要好用

android 异屏同显二.

android主屏: android副屏 | | mediaProjection ----SufaceTextrue ---Open…

【数据结构】平衡二叉树左旋右旋与红黑树

平衡二叉树左旋右旋与红黑树 平衡二叉树 定义 平衡二叉树是二叉搜索树的一种特殊形式。二叉搜索树&#xff08;Binary Search Tree&#xff0c;BST&#xff09;是一种具有以下性质的二叉树&#xff1a; 对于树中的每个节点&#xff0c;其左子树中的所有节点都小于该节点的值…

【vector模拟实现】附加代码讲解

vector模拟实现 一、看源代码简单实现1. push_backcapacity&#xff08;容量&#xff09;sizereserve&#xff08;扩容&#xff09;operator[ ] &#xff08;元素访问&#xff09; 2. pop_back3. itorator&#xff08;迭代器&#xff09;4.insert & erase &#xff08;头插…