Python
记录Python的笔记,大家一起学习。
杨林伟
像火箭科学家一样思考!
展开
-
171 python - 顺序表
Python中的list和tuple两种类型采用了顺序表的实现技术,具有前面讨论的顺序表的所有性质。tuple是不可变类型,即不变的顺序表,因此不支持改变其内部状态的任何操作,而其他方面,则与list的性质类似。1. list的基本实现技术Python标准类型list就是一种元素个数可变的线性表,可以加入和删除元素,并在各种操作中维持已有元素的顺序(即保序),而且还具有以下行为特征:基...原创 2019-08-20 11:31:18 · 254 阅读 · 0 评论 -
170 python - 内置类型性能分析
1. timeit模块timeit模块可以用来测试一小段Python代码的执行速度。class timeit.Timer(stmt='pass', setup='pass', timer=<timer function>)Timer是测量小段代码执行速度的类。stmt参数是要测试的代码语句(statment);setup参数是运行代码时需要的设置;timer参数是一个定时...原创 2019-08-20 11:11:53 · 270 阅读 · 0 评论 -
169 python网络编程 - Web动态服务器
1.基本实现#coding=utf-8import socketimport sysfrom multiprocessing import Processimport reclass WSGIServer(object): addressFamily = socket.AF_INET socketType = socket.SOCK_STREAM reque...原创 2019-08-20 10:21:29 · 352 阅读 · 0 评论 -
168 python网络编程 - 服务器动态资源请求
1. 浏览器请求动态页面过程2. WSGI怎么在你刚建立的Web服务器上运行一个Django应用和Flask应用,如何不做任何改变而适应不同的web架构呢?在以前,选择 Python web 架构会受制于可用的web服务器,反之亦然。如果架构和服务器可以协同工作,那就好了:但有可能面对(或者曾有过)下面的问题,当要把一个服务器和一个架构结合起来时,却发现他们不是被设计成协同工作的:...原创 2019-08-20 10:17:28 · 262 阅读 · 0 评论 -
167 python网络编程 - Web静态服务器
1.显示固定页面#coding=utf-8import socketfrom multiprocessing import Processdef handleClient(clientSocket): '用一个新的进程,为一个客户端进行服务' recvData = clientSocket.recv(2014) requestHeaderLines = recv...原创 2019-08-20 10:10:24 · 329 阅读 · 0 评论 -
166 python网络编程 - HTTP协议简介
1. 使用谷歌/火狐浏览器分析在Web应用中,服务器把网页传给浏览器,实际上就是把网页的HTML代码发送给浏览器,让浏览器显示出来。而浏览器和服务器之间的传输协议是HTTP,所以:HTML是一种用来定义网页的文本,会HTML,就可以编写网页;HTTP是在网络上传输HTML的协议,用于浏览器和服务器的通信。Chrome浏览器提供了一套完整地调试工具,非常适合Web开发。安装好C...原创 2019-08-20 10:04:43 · 472 阅读 · 0 评论 -
165 python网络编程 - 单进程服务器(gevent版)
import sysimport timeimport geventfrom gevent import socket,monkeymonkey.patch_all()def handle_request(conn): while True: data = conn.recv(1024) if not data: con...原创 2019-08-19 18:15:48 · 350 阅读 · 0 评论 -
164 python网络编程 - 协程(gevent版)
greenlet已经实现了协程,但是这个还的人工切换,是不是觉得太麻烦了,不要捉急,python还有一个比greenlet更强大的并且能够自动切换任务的模块gevent其原理是当一个greenlet遇到IO(指的是input output 输入输出,比如网络、文件操作等)操作时,比如访问网络,就自动切换到其他的greenlet,等到IO操作完成,再在适当的时候切换回来继续执行。由于IO操作非常...原创 2019-08-19 18:13:27 · 310 阅读 · 0 评论 -
163 python网络编程 - 协程(greenlet版)
为了更好使用协程来完成多任务,python中的greenlet模块对其封装,从而使得切换任务变的更加简单.安装方式使用如下命令安装greenlet模块:sudo pip install greenlet#coding=utf-8from greenlet import greenletimport timedef test1(): while True: ...原创 2019-08-19 18:11:22 · 390 阅读 · 0 评论 -
162 python网络编程 - 协程
协程,又称微线程,纤程。英文名Coroutine。协程是啥首先我们得知道协程是啥?协程其实可以认为是比线程更小的执行单元。 为啥说他是一个执行单元,因为他自带CPU上下文。这样只要在合适的时机, 我们可以把一个协程 切换到另一个协程。 只要这个过程中保存或恢复 CPU上下文那么程序还是可以运行的。通俗的理解:在一个线程中的某个函数,可以在任何地方保存当前函数的一些临时变量等信息,然后切换到另...原创 2019-08-19 18:10:12 · 293 阅读 · 0 评论 -
161 python网络编程 - 单进程服务器(epoll版)
1. epoll的优点:没有最大并发连接的限制,能打开的FD(指的是文件描述符,通俗的理解就是套接字对应的数字编号)的上限远大于1024效率提升,不是轮询的方式,不会随着FD数目的增加效率下降。只有活跃可用的FD才会调用callback函数;即epoll最大的优点就在于它只管你“活跃”的连接,而跟连接总数无关,因此在实际的网络环境中,epoll的效率就会远远高于select和poll。2. ...原创 2019-08-19 18:08:38 · 259 阅读 · 0 评论 -
160 python网络编程 - 单进程服务器(select版)
1. select 原理在多路复用的模型中,比较常用的有select模型和epoll模型。这两个都是系统接口,由操作系统提供。当然,Python的select模块进行了更高级的封装。网络通信被Unix系统抽象为文件的读写,通常是一个设备,由设备驱动程序提供,驱动可以知道自身的数据是否可用。支持阻塞操作的设备驱动通常会实现一组自身的等待队列,如读/写等待队列用于支持上层(用户层)所需的block...原创 2019-08-19 18:07:14 · 315 阅读 · 0 评论 -
159 python网络编程 - 单进程服务器(非堵塞模式)
服务器#coding=utf-8from socket import *import time# 用来存储所有的新链接的socketg_socketList = []def main(): serSocket = socket(AF_INET, SOCK_STREAM) serSocket.setsockopt(SOL_SOCKET, SO_REUSEADDR ,...原创 2019-08-19 18:05:02 · 312 阅读 · 0 评论 -
158 python网络编程 - 多线程服务器
#coding=utf-8from socket import *from threading import Threadfrom time import sleep# 处理客户端的请求并执行事情def dealWithClient(newSocket,destAddr): while True: recvData = newSocket.recv(1024)...原创 2019-08-19 18:03:47 · 245 阅读 · 0 评论 -
157 python网络编程 - 多进程服务器
from socket import *from multiprocessing import *from time import sleep# 处理客户端的请求并为其服务def dealWithClient(newSocket,destAddr): while True: recvData = newSocket.recv(1024) if l...原创 2019-08-19 18:02:24 · 332 阅读 · 0 评论 -
156 python网络编程 - 单进程服务器
from socket import *serSocket = socket(AF_INET, SOCK_STREAM)# 重复使用绑定的信息serSocket.setsockopt(SOL_SOCKET, SO_REUSEADDR , 1)localAddr = ('', 7788)serSocket.bind(localAddr)serSocket.listen(5)...原创 2019-08-19 18:01:19 · 245 阅读 · 0 评论 -
155 python网络编程 - listen的队列长度
服务器端运行#coding=utf-8from socket import *from time import sleep# 创建sockettcpSerSocket = socket(AF_INET, SOCK_STREAM)# 绑定本地信息address = ('', 7788)tcpSerSocket.bind(address)connNum = int(raw_in...原创 2019-08-19 17:47:49 · 374 阅读 · 0 评论 -
154 python网络编程 - TCP案例(模拟QQ聊天)
客户端参考代码#coding=utf-8from socket import *# 创建sockettcpClientSocket = socket(AF_INET, SOCK_STREAM)# 链接服务器serAddr = ('192.168.1.102', 7788)tcpClientSocket.connect(serAddr)while True: # 提示...原创 2019-08-19 17:14:26 · 396 阅读 · 0 评论 -
153 python网络编程 - TCP客户端
tcp的客户端要比服务器端简单很多,如果说服务器端是需要自己买手机、查手机卡、设置铃声、等待别人打电话流程的话,那么客户端就只需要找一个电话亭,拿起电话拨打即可,流程要少很多。示例代码:#coding=utf-8from socket import *# 创建sockettcpClientSocket = socket(AF_INET, SOCK_STREAM)# 链接服务器se...原创 2019-08-19 17:12:59 · 272 阅读 · 0 评论 -
152 python网络编程 - TCP服务器
如果想要完成一个tcp服务器的功能,需要的流程如下:socket创建一个套接字bind绑定ip和portlisten使套接字变为可以被动链接accept等待客户端的链接recv/send接收发送数据一个很简单的tcp服务器如下:#coding=utf-8from socket import *# 创建sockettcpSerSocket = socket(AF_INET,...原创 2019-08-19 17:11:17 · 251 阅读 · 0 评论 -
151 python网络编程 - TCP相关介绍
udp通信模型udp通信模型中,在通信开始之前,不需要建立相关的链接,只需要发送数据即可,类似于生活中,“写信”"。tcp通信模型udp通信模型中,在通信开始之前,一定要先建立相关的链接,才能发送数据,类似于生活中,“打电话”"...原创 2019-08-19 17:08:44 · 249 阅读 · 0 评论 -
150 python网络编程 - UDP广播
现实生活中的广播网络编程中的广播#coding=utf-8import socket, sysdest = ('<broadcast>', 7788)# 创建udp套接字s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 对这个需要发送广播数据的套接字进行修改设置,否则不能发送广播数据s.setsockop...原创 2019-08-19 17:07:09 · 404 阅读 · 0 评论 -
149 python网络编程 - TFTP下载案例
1.TFTP下载演示2. TFTP协议介绍TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户端与服务器之间进行简单文件传输的协议特点:简单占用资源小适合传递小文件适合在局域网进行传递端口号为69基于UDP实现3. TFTP下载过程TFTP服务器默认监听69号端口。当客户端发送“下载”请求(...原创 2019-08-19 17:04:28 · 311 阅读 · 0 评论 -
148 python网络编程 - wireshark抓包工具使用
1. 安装wireshark2. wireshark的使用原创 2019-08-19 17:00:06 · 708 阅读 · 0 评论 -
147 python网络编程 - UDP案例
echo服务器运行现象echo服务器端参考代码#coding=utf-8from socket import *#1. 创建套接字udpSocket = socket(AF_INET, SOCK_DGRAM)#2. 绑定本地的相关信息bindAddr = ('', 7788) # ip地址和端口号,ip一般不用写,表示本机的任何一个ipudpSocket.bind(b...原创 2019-08-19 16:55:56 · 293 阅读 · 0 评论 -
146 python网络编程 - UDP网络通信过程
原创 2019-08-19 16:53:25 · 316 阅读 · 0 评论 -
145 python网络编程 - UDP绑定信息
1. 绑定信息还记得在上一节课中,如果一个网络程序在每次运行的时候端口是随机变化的么?一般情况下,在一天电脑上运行的网络程序有很多,而各自用的端口号很多情况下不知道,为了不与其他的网络程序占用同一个端口号,往往在编程中,udp的端口号一般不绑定但是如果需要做成一个服务器端的程序的话,是需要绑定的,想想看这又是为什么呢?如果报警电话每天都在变,想必世界就会乱了,所以一般服务性的程序,往往需要...原创 2019-08-19 16:52:27 · 354 阅读 · 0 评论 -
144 python网络编程 - UDP端口问题
会变的端口号重新运行多次脚本,然后在“网络调试助手”中,看到的现象如下:每重新运行一次网络程序,上图中红圈中的数字,不一样的原因在于,这个数字标识这个网络程序,当重新运行时,如果没有确定到底用哪个,系统默认会随机分配。记住一点:这个网络程序在运行的过程中,这个就唯一标识这个程序,所以如果其他电脑上的网络程序如果想要向此程序发送数据,那么就需要向这个数字(即端口)标识的程序发送即可。...原创 2019-08-19 16:50:25 · 407 阅读 · 0 评论 -
143 python网络编程 - UDP发送、接收数据
1. 创建udp网络程序-接收数据#coding=utf-8from socket import *#1. 创建套接字udpSocket = socket(AF_INET, SOCK_DGRAM)#2. 准备接收方的地址sendAddr = ('192.168.1.103', 8080)#3. 从键盘获取数据sendData = raw_input("请输入要发送的数据:"...原创 2019-08-19 16:48:09 · 328 阅读 · 0 评论 -
142 python网络编程 - UDP发送数据
创建一个udp客户端程序的流程是简单,具体步骤如下:创建客户端套接字发送/接收数据关闭套接字代码如下:#coding=utf-8from socket import *#1. 创建套接字udpSocket = socket(AF_INET, SOCK_DGRAM)#2. 准备接收方的地址sendAddr = ('192.168.1.103', 8080)#3. ...原创 2019-08-19 16:46:54 · 335 阅读 · 0 评论 -
141 python网络编程 - UDP介绍
DP — 用户数据报协议,是一个无连接的简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快。UDP是一种面向无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的路径传往目的地,因此能...原创 2019-08-19 16:45:13 · 268 阅读 · 0 评论 -
140 python网络编程 - socket简介
1.本地的进程间通信(IPC)有很多种方式,例如队列同步(互斥锁、条件变量等)以上通信方式都是在一台机器上不同进程之间的通信方式,那么问题来了网络中进程之间如何通信?2. 网络中进程之间如何通信首要解决的问题是如何唯一标识一个进程,否则通信无从谈起!在本地可以通过进程PID来唯一标识一个进程,但是在网络中这是行不通的。其实TCP/IP协议族已经帮我们解决了这个问题,网络层的“i...原创 2019-08-19 16:43:22 · 254 阅读 · 0 评论 -
139 python网络编程 - 网络概述
1.TCP/IP协议(族)早期的计算机网络,都是由各厂商自己规定一套协议,IBM、Apple和Microsoft都有各自的网络协议,互不兼容。为了把全世界的所有不同类型的计算机都连接起来,就必须规定一套全球通用的协议,为了实现互联网这个目标,互联网协议簇(Internet Protocol Suite)就是通用协议标准。因为互联网协议包含了上百种协议标准,但是最重要的两个协议是TCP和IP协...原创 2019-08-19 16:40:52 · 262 阅读 · 0 评论 -
138 python高级 - 正则表达式(贪婪和非贪婪)
Python里数量词默认是贪婪的(在少数语言里也可能是默认非贪婪),总是尝试匹配尽可能多的字符;非贪婪则相反,总是尝试匹配尽可能少的字符。在"*","?","+","{m,n}"后面加上?,使贪婪变成非贪婪。>>> s="This is a number 234-235-22-423">>> r=re.match(".+(\d+-\d+-\d+-\d+)...原创 2019-08-19 16:27:06 · 291 阅读 · 0 评论 -
137 python高级 - 正则表达式(re模块的高级用法)
search需求:匹配出文章阅读的次数#coding=utf-8import reret = re.search(r"\d+", "阅读次数为 9999")ret.group()运行结果:findall需求:统计出python、c、c++相应文章阅读的次数#coding=utf-8import reret = re.findall(r"\d+", "python = ...原创 2019-08-19 16:25:47 · 431 阅读 · 0 评论 -
136 python高级 - 正则表达式(匹配分组)
示例1:|需求:匹配出0-100之间的数字#coding=utf-8import reret = re.match("[1-9]?\d","8")ret.group()ret = re.match("[1-9]?\d","78")ret.group()# 不正确的情况ret = re.match("[1-9]?\d","08")ret.group()# 修正之后的...原创 2019-08-19 16:22:47 · 359 阅读 · 0 评论 -
135 python高级 - 正则表达式(表示边界)
示例1:$需求:匹配163.com的邮箱地址#coding=utf-8import re# 正确的地址ret = re.match("[\w]{4,20}@163\.com", "xiaoWang@163.com")ret.group()# 不正确的地址ret = re.match("[\w]{4,20}@163\.com", "xiaoWang@163.comheihei...原创 2019-08-19 16:21:13 · 819 阅读 · 0 评论 -
134 python高级 - 正则表达式(表示数量)
匹配多个字符的相关格式示例1:*需求:匹配出,一个字符串第一个字母为大小字符,后面都是小写字母并且这些小写字母可有可无。#coding=utf-8import reret = re.match("[A-Z][a-z]*","Mm")ret.group()ret = re.match("[A-Z][a-z]*","Aabcdef")ret.group()运行结果:示例2...原创 2019-08-19 16:19:44 · 1232 阅读 · 0 评论 -
133 python高级 - 正则表达式(原始字符串)
>>> mm = "c:\\a\\b\\c">>> mm'c:\\a\\b\\c'>>> print(mm)c:\a\b\c>>> print(mm)c:\a\b\c>>> re.match("c:\\\\",mm).group()'c:\\'>>> ret = re.ma...原创 2019-08-19 16:17:13 · 437 阅读 · 0 评论 -
132 python高级 - 正则表达式(表示字符)
示例1: .#coding=utf-8import reret = re.match(".","a")ret.group()ret = re.match(".","b")ret.group()ret = re.match(".","M")ret.group()运行结果:示例2:[ ]#coding=utf-8import re# 如果hello的首字符小...原创 2019-08-19 16:15:31 · 329 阅读 · 0 评论