python知识点总结(九)
python知识点总结九
- 1、TCP中socket的实现
- 代码实现TCP协议
- a、服务端
- b、客户端:
- 2、写装饰器,限制函数被执行的频率,如10秒一次
- 3、请实现一个装饰器,通过一次调用函数重复执行5次
- 4、写一个登录装饰器对一下函数进行装饰,要求输入账号和密码才能运行该函数
- 5、字典的fromkeys
- 6、字典推导式
- 7、字典 setdefault() 方法
- 8、len(dict)
- 9、将"python is shell" 转为 “nohtyp si llehs”
1、TCP中socket的实现
listen():监听客户端的连接,客户端有链接,listen马上就有返回。
accept():连接之后,会返回客户端的信息(ip地址、端口号),如果没有连接则一直堵塞。连接成功后,服务器就可以发数据,同时会创建一个新的socket
recvfrom:接收客户端的数据,如果服务端没有收到客户端发来的数据,会滞留,下面的代码不会执行。
read():读取客户端发过来的数据
write():将数据返回给客户端
由new_socket来完成与客户端数据的传输
如果new_socket关闭,则说明当前的这个客户端请求结束,服务端服务完毕;如果有新的请求来了,服务器会创建新的new_socket与它通讯。
如果关掉第一个socket,则说明整个服务端程序关闭了
代码实现TCP协议
a、服务端
from socket import *# todo 1、创建server-socket TCP协议
server_socket = socket(AF_INET, SOCK_STREAM)# todo 2、创建目标服务器,绑定一个IP和端口 服务器里面空的字符串代表server_socket绑定这台机器下的任何ip地址
host_port = ('', 8088)
server_socket.bind(host_port)# todo 3、监听服务器的socket,listen让socket处于被动。这时就可以接收客户端的连接请求了
server_socket.listen(5) # 一般为5,表示客户端线程挂起的个数# todo 4、等待客户端的连接请求,当前函数是线程阻塞的函数,accept返回2个值,第一个:新的socket,第二个:客户端地址
new_socket, client_addr = server_socket.accept() # todo 新创建的socket是server_socket中的子socket,只是和当前的客户端(一个客户端)收发数据# todo 5、服务器接收客户端发送过来的数据,recv一般用于TCP协议的接收数据,recvfrom用于UDP
data = new_socket.recv(1024) # data是字节数据print('服务器接收的数据是:', data.decode('utf-8'))# todo 6、服务器端发送数据给客户端,在TCP中发送数据用send,UDP用sendto
new_socket.send('THANK you'.encode('utf-8'))# 关闭套接字
new_socket.close() # todo new_socket关闭意味着当前客户端的服务已经完成
server_socket.close() # todo server_socket关闭意味着整个服务器全部关闭
代码注释:
1、host_port = (‘’, 8088)
server_socket.bind(host_port)
创建目标服务器,绑定一个IP和端口 服务器里面空的字符串代表server_socket绑定这台机器下的任何ip地址
2、new_socket, client_addr = server_socket.accept()
等待客户端的连接请求,当前函数是线程阻塞的函数,accept返回2个值,第一个:新的socket,第二个:客户端地址,
新创建的socket是server_socket中的子socket,只是和当前的客户端(一个客户端)收发数据
3、data = new_socket.recv(1024) # data是字节数据
服务器接收客户端发送过来的数据,recv一般用于TCP协议的接收数据,recvfrom用于UDP
4、new_socket.send(‘THANK you’.encode(‘utf-8’))
服务器端发送数据给客户端,在TCP中发送数据用send,UDP用sendto
b、客户端:
from socket import *# todo 1、客户端、创建client-socket TCP协议
client_socket = socket(AF_INET, SOCK_STREAM)# todo 2、客户端发送连接的请求(不是传输数据的请求,是创建连接的请求)# todo 目标服务器的ip和端口号
server_ip_port = ('192.168.1.112', 8088)# todo 发送连接请求,此时服务端产生了新的new_socket
client_socket.connect(server_ip_port)#client_socket.close()# todo 客户端发送请求,用send不用sendto,客户端知道服务器的ip和端口,服务器也知道客户端的端口和ip,因为是面向连接的
send_data = input('请输入:')
client_socket.send(send_data.encode('utf-8'))# todo 接收服务器返回的数据
recv_data = client_socket.recv(1024)print('客户端接收到的服务器的数据为:', recv_data.decode(encoding='utf-8'))# todo 关闭socket
client_socket.close()
代码注释:
send_data = input(‘请输入:’)
client_socket.send(send_data.encode(‘utf-8’))
客户端发送请求,用send不用sendto,客户端知道服务器的ip和端口,服务器也知道客户端的端口和ip,因为是面向连接的
2、写装饰器,限制函数被执行的频率,如10秒一次
def A(func):start = 0def inner(*args, **kwargs):nonlocal startnow = time.time()if now - start > 10:res = func(*args, **kwargs)start = nowreturn reselse:return ("访问过于频繁")return inner@A
def func(a, b):return a + bprint(func(2, 3))
# time.sleep(11)
print(func(2, 3))
3、请实现一个装饰器,通过一次调用函数重复执行5次
def outer(func):i = 0def inner(*args, **kwargs):nonlocal iwhile i < 5:res = func(*args, **kwargs)print(f'执行第{i}次,结果为{res}')i += 1return inner@outer
def func(a, b):return a + bfunc(5, 5)
4、写一个登录装饰器对一下函数进行装饰,要求输入账号和密码才能运行该函数
def outer(func):def inner(*args, **kwargs):user = kwargs.get('user')pwd = kwargs.get('pwd')if user and pwd:res = func(*args, **kwargs)return reselse:return "函数不执行"return inner@outer
def func6(user=None, pwd=None):return "函数开始执行"print(func6(pwd='123', user="wer"))
5、字典的fromkeys
Python 字典 fromkeys() 函数用于创建一个新字典,以序列 seq 中元素做字典的键,value 为字典所有键对应的初始值。
fromkeys() 方法语法:
dict.fromkeys(seq[, value])
seq – 字典键值列表。
value – 可选参数, 设置键序列(seq)对应的值,默认为 None。
该方法返回一个新字典。
seq = ('name', 'age', 'sex')tinydict = dict.fromkeys(seq)
print ("新的字典为 : %s" % str(tinydict))tinydict = dict.fromkeys(seq, 10)
print ("新的字典为 : %s" % str(tinydict))
输出结果为:
新的字典为 : {‘age’: None, ‘name’: None, ‘sex’: None}
新的字典为 : {‘age’: 10, ‘name’: 10, ‘sex’: 10}
6、字典推导式
{键表达式:值表达式 for k , v in dict.items() if 表达式}
d = {“a”: 1, “b”: 2}变为{“A”:1,“B”:2}
{k.upper:v for k,v in d.items()}
将键值互换
print({v: k for k, v in d.items()})
统计字符串中各个字符出现的次数
s1 = 'afsddasdas'
print({item:s1.count(item) for item in s1})
7、字典 setdefault() 方法
Python 字典 setdefault() 方法和 get()方法 类似, 如果键不存在于字典中,将会添加键并将值设为默认值。
setdefault()方法语法:
dict.setdefault(key, default=None)
key – 查找的键值。
default – 键不存在时,设置的默认键值。
如果 key 在 字典中,返回对应的值。如果不在字典中,则插入 key 及设置的默认值 default,并返回 default ,default 默认值为 None。
tinydict = {'Name': 'Runoob', 'Age': 7}print ("Age 键的值为 : %s" % tinydict.setdefault('Age', None))
print ("Sex 键的值为 : %s" % tinydict.setdefault('Sex', None))
print ("新字典为:", tinydict)
以上实例输出结果为:
Age 键的值为 : 7
Sex 键的值为 : None
新字典为: {‘Age’: 7, ‘Name’: ‘Runoob’, ‘Sex’: None}
关于字典中 get() 和 setdefault() 的区别:
主要在于当查找的键值 key 不存在的时候,setdefault()函数会返回默认值并更新字典,添加键值;而 get() 函数只返回默认值,并不改变原字典。
tinydict = {'Name': 'Runoob', 'Age': 7}print("Age 键的值为 : %s" % tinydict.get('Age', None))
print("Sex 键的值为 : %s" % tinydict.get('Sex', "女"))
print("新字典为:", tinydict)
执行结果:
Age 键的值为 : 7
Sex 键的值为 : 女
新字典为: {‘Name’: ‘Runoob’, ‘Age’: 7}
8、len(dict)
计算字典元素个数,即键的总数。
>>> tinydict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
>>> len(tinydict)
3
9、将"python is shell" 转为 “nohtyp si llehs”
a="python is shell"
aa=list(map(lambda x:x[::-1],a.split(" ")))
aaa=' '.join(aa)
print(aaa)
range
相关文章:

python知识点总结(九)
python知识点总结九 1、TCP中socket的实现代码实现TCP协议a、服务端b、客户端: 2、写装饰器,限制函数被执行的频率,如10秒一次3、请实现一个装饰器,通过一次调用函数重复执行5次4、写一个登录装饰器对一下函数进行装饰,…...

浅谈Linux中的软锁定(soft lockup)和硬件监视器(watchdog)
目录 1. 问题所示2. 基本知识3. 进阶知识 1. 问题所示 跑深度学习的时候遇到卡顿卡机 hostname kernel:watchdog BUG:soft lockup - CPU#16 stuck for 130s![P2PMain-72:4030570]界面如下所示: 大概意思是: watchdog_thresh参数是硬件监视器的超时阈值…...
数据库的四个特性?MySQL是如何实现的?
首先MySQL中,数据库的四个特性分为: 原子性一致性隔离性持久性 也就是我们常说的ACID。 那么这四个特性数据库是如何实现的呢? 持久性---> redo log: redo log(重做日志): redolog本身是…...

Jupyter R绘图 汉字显示乱码的解决办法
1.Jupyte中,R绘图,汉字显示乱码 2.如何解决? (1)R中安装showtext 登录linux服务器 #R > install.packages(“showtext”) … 出错 (2)退出R,安装freetype-config #apt install libfreetype6-dev 出错 (3)进入R&…...
推荐几个值得一读的Qt开源项目
VNote - 基于Qt的免费开源笔记软件,适合那些寻找跨平台笔记解决方案的用户。项目地址:https://github.com/vnotex/vnote Qt NodeEditor - 类似于UE4蓝图的节点编辑器,对于想要深入了解Qt图形编辑和节点系统的人来说,这是一个极好…...

【XR806开发板试用】使用PWM模块模拟手机呼吸灯提示功能
一般情况下,我们的手机在息屏状态,当收到消息处于未读状态时,会有呼吸灯提醒,这次有幸抽中XR806开发板的试用,经过九牛二虎之力终于将环境搞好了,中间遇到各种问题,在我的另一篇文章中已详细描述…...
Mysql——索引下推
MySQL的索引下推(Index Condition Pushdown, ICP)是一种查询优化技术,它允许MySQL在存储引擎层执行部分WHERE子句中的过滤条件,而非全部在MySQL服务器层执行。这使得在扫描索引过程中就可以剔除不满足条件的记录,从而减…...
Springboot项目之mybatis-plus多容器分布式部署id重复问题之源码解析
mybatis-plus 3.3.2 部署多个pod id冲突问题 配置: # 设置随机 mybatis-plus.global-config.worker-id: ${random.int(1,31)} mybatis-plus.global-config.datacenter-id: ${random.int(1,31)}源码解析:MybatisSqlSessionFactoryBean 重点:…...

微信答题小程序云开发--实现云函数上传题目图片 base64功能
需求功能 题目带有图片,需要支持上传图片功能。微信答题小程序云开发,实现云函数上传题目图片、存储功能、查询显示等功能。 云函数开发遇到的问题 在微信云开发环境当中,普通的用户并没有往云存储内写入文件的权限。 所以普通用户想要使用…...

学会Sass的高级用法,减少样式冗余
在当今的前端开发领域,样式表语言的进步已经显著提升了代码组织性和可维护性。Sass(Syntactically Awesome Style Sheets)作为CSS预处理器的翘楚,以其强大的变量、嵌套规则、混合宏(mixin)、循环和函数等高…...

【Java初阶(五)】类和对象
❣博主主页: 33的博客❣ ▶文章专栏分类: Java从入门到精通◀ 🚚我的代码仓库: 33的代码仓库🚚 目录 1. 前言2.面向对象的认识3.类的认识4. 类的实例化4.1什么是实例化4.2类和对象的说明 5.this引用6.对象初始化6.1 构造方法 7.static关键字8.代码块8.1 …...
AWTK-MODBUS 服务器
AWTK-MODBUS 服务器 1. 介绍 AWTK-MODBUS 提供了一个简单的 MODBUS 服务器,可以通过配置文件来定义寄存器和位的数量和初始值。 启动方法: bin/modbus_server_ex config/default.json2. 配置文件 配置文件使用JSON格式。 url: 连接地址auto_inc_in…...
JavaScript快速入门笔记之一(基本概念)
JavaScript快速入门笔记之一(基本概念) 前端三大语言: HTML:专门编写网页内容的语言CSS:专门美化网页样式的语言JavaScript:专门编写网页交互的语言 名词解释: 交互:输入数据&#…...

前端学习之css基本网格布局
网格布局 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>网格布局</title><style>.a{/* grid网格布局 */display: grid;width: 400px;height: 400px;border: 1px solid red;/* 设置当前…...

[网鼎杯2018]Unfinish 两种方法 -----不会编程的崽
网鼎杯太喜欢搞二次注入了吧。上次是无列名盲注,这次又是二次注入盲注。。。不知道方法还是挺难的。哎,网鼎嘛,能理解透彻就很强了。能自己做出来那可太nb了。 又是熟悉的登录框。不知道这是第几次看见网鼎杯的登录框了。后台扫描一下&#x…...

安防监控视频汇聚平台EasyCVR在银河麒麟V10系统中的启动异常及解决方法
安防监控视频平台EasyCVR具备较强的兼容性,它可以支持国标GB28181、RTSP/Onvif、RTMP,以及厂家的私有协议与SDK,如:海康ehome、海康sdk、大华sdk、宇视sdk、华为sdk、萤石云sdk、乐橙sdk等。平台兼容性强,支持Windows系…...

了解云原生
声明:内容来自AI,未经验证,仅供参考! 1、云原生学习路线 学习云原生(Cloud Native)技术涉及了解和掌握一系列的概念、技术和工具。云原生是一种构建和运行应用程序的方法,旨在充分利用云计算的灵活性、可伸缩性和弹性。以下是一…...
【go从入门到精通】for和for range的区别
作者简介: 高科,先后在 IBM PlatformComputing从事网格计算,淘米网,网易从事游戏服务器开发,拥有丰富的C,go等语言开发经验,mysql,mongo,redis等数据库,设计模…...

【C语言】【Leetcode】88. 合并两个有序数组
文章目录 一、题目二、思路再思考 一、题目 链接: link 二、思路 这题属于简单题,比较粗暴的做法就是直接比较两个数组,先把第二个数组加到第一个的后面,如何冒泡排序,这种方法简单粗暴但有效,可是不适用于这题&…...

DMA控制器
前言 大家好,我是jiantaoyab,这是我作为学习笔记的25篇,本篇文章给大家介绍DMA。 无论 I/O 速度如何提升,比起 CPU,总还是太慢。如果我们对于 I/O 的操作,都是由 CPU 发出对应的指令,然后等待…...
面试题——计算机网络:HTTP和HTTPS的区别?
HTTP(HyperText Transfer Protocol):作为互联网上应用最广泛的网络通信协议,HTTP是基于TCP/IP协议族的应用层协议。它采用标准的请求-响应模式进行通信,通过简洁的报文格式(包含请求行、请求头、请求体等&a…...

CTFSHOW-WEB-36D杯
给你shell 这道题对我这个新手还是有难度的,花了不少时间。首先f12看源码,看到?view_source,点进去看源码 <?php //Its no need to use scanner. Of course if you want, but u will find nothing. error_reporting(0); include "…...

LiveGBS作为下级平台GB28181国标级联2016|2022对接海康大华宇视华为政务公安内网等GB28181国标平台查看级联状态及会话
LiveGBS作为下级平台GB28181国标级联2016|2022对接海康大华宇视华为政务公安内网等GB28181国标平台查看级联状态及会话 1、GB/T28181级联概述2、搭建GB28181国标流媒体平台3、获取上级平台接入信息3.1、向下级提供信息3.2、上级国标平台添加下级域3.3、接入LiveGBS示例 4、配置…...

Tesseract OCR 安装与中文+英文识别实现
一、下载 https://digi.bib.uni-mannheim.de/tesseract/ 下载,尽量选择时间靠前的(识别更好些)。符合你的运行机(我的是windows64) 持续点击下一步安装,安装你认可的路径即可,没必要配置环境变…...

性能测试-jmeter实战1
课程:B站大学 记录软件测试-性能测试学习历程、掌握前端性能测试、后端性能测试、服务端性能测试的你才是一个专业的软件测试工程师 性能测试-jmeter实战1 为什么需要性能测试呢?性能测试的作用?性能测试体系性能测试基础性能测试工具性能监控…...
记录算法笔记(2025.5.28)只出现一次的数字
给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。 示例 1 : 输入࿱…...

【机器学习基础】机器学习入门核心算法:XGBoost 和 LightGBM
机器学习入门核心算法:XGBoost 和 LightGBM 一、算法逻辑XGBoost (eXtreme Gradient Boosting)LightGBM (Light Gradient Boosting Machine) 二、算法原理与数学推导目标函数(二者通用)二阶泰勒展开:XGBoost 分裂点增益计算&#…...

百度量子蜘蛛3.0横空出世,搜索引擎迎来“量子跃迁“级革命
一、量子蜘蛛3.0的三大颠覆性升级 1. 动态抓取:让内容实时"量子纠缠" - 智能频率调节:根据网站更新频率自动调整抓取节奏,新闻类站点日抓取量达3-5次,静态页面抓取间隔延长至72小时。某财经媒体通过"热点事件15分钟…...
音视频中的复用器
🎬 什么是复用器(Muxer)? 复用器(muxer)是负责把音频、视频、字幕等多个媒体流打包(封装)成一个单一的文件格式的组件。 💡 举个形象的例子: 假设你有两样东…...

HTML Day03
Day03 0. 引言1. CSS1.1 CSS的3种使用方法1.2 内联样式1.3 内部样式表1.4 外部CSS文件 2. 图像3. 表格3.1单元格间距和单元格边框 4. 列表4.1 有序表格的不同类型4.2 不同类型的无序表格4.3 嵌套列表 5. 区块6. 布局6.1 div布局6.2 表格布局 0. 引言 HELLO ^ _ ^大家好…...