一.知识点补充:
1.解释型语言和编译型语言
编译型(目前有两种解释):
先把代码编译成机器码 -> 机器寄存器去运行 :C语言
先把代码编译成XXX -> 计算机找虚拟机执行代码 -> 机器码交给计算机去执行 :C语言,JAVA,C#
解释型:
边解释边执行
2.Python中的作用域
Python中的函数是一个作用域
3.这里规定一下以后写元组的格式:
v = (1,2,3,)

1.Python中函数是一个作用域 i=0 for i in range(10): pass print(i) 结果:9 def func(): for i in range(10): pass func() print(i) 结果:报错 2.列表生成式 val = [lambda x:x+i for i in range(10)] ret = val[3](6) print(ret) 结果:15 val = [lambda :x for x in range(10)] ret = val[3]() print(ret) 结果:9
二.Python2和Python3的区别(必会)
1.编码&字符串
字符串:
python2:
unicode v = u"root" 本质上用unicode存储(万国码)
(str/bytes) v = "root" 本质用字节存储
python3:
str v = "root" 本质上用unicode存储(万国码)
bytes v = b"root" 本质上用字节存储
编码:
python2:
ASCII
文件头可以修改: # -*- encoding:utf-8 -*-
python3:
utf-8
文件头可以修改:# -*- encoding:utf-8 -*-
注意:文件是如何存储的?
2.继承
python2:新式类/经典类
python3:新式类(继承object)
3.范围
python2:range/xrange
python3: range
4.输入
python2:v1 = raw_input("请输入用户名: ")
python3:v2 = input("请输入用户名: ")
5.打印:
python2:print "XX"
python3:print(123)
三.网络编程
1.PC有网卡,网卡中有MAC地址
cmd -> config /all -> 物理地址即为你的MAC地址
2.局域网中路由器或交换机中的DHCP服务为我们自动分配IP地址
DHCP服务:说通俗一点,就是你在你的网卡的本地连接里设置成“自动获取IP地址”,而DHCP就是为你的网卡那个连接提供自动配置IP地址,子网掩码,网关,DNS等信息的一种服务协议,运行这种协议的就叫DHCP服务器
IP:为计算机网络相互连接进行通信而设计的协议
IPv4:互联网协议的第四版也是第一个被广泛使用,构成现今互联网即使的基础的协议,用32位0/1序列来表示,分为四段八位序列,每一段的范围是:0~255
00000000.00000000.00000000.00000000
0~255 0~255 0~255 0~255
IPv6:用来设计替代现行版本IPv4的下一代版本,使用16进制来表示,也按照8位分割,段与段之间用":"分割
00000000.00000000.00000000.00000000.00000000.00000000
子网掩码:子网掩码是一个32位地址,用于屏蔽IP地址的一部分以区别网络标识和主机标识,并说明该IP地址是在局域网上,还是在远程网上;不能单独存在,必须和IP地址结合在一起使用
192.168.13.84
255.255.255.0
网关IP:如果两个IP地址,不在同一网段,这时候,要想通过IP地址访问另一网段的计算机(也是IP地址),就需要网关地址。网关地址就是出口的地址,而且,网关地址,是你最近的一个出口的地址。网关地址总是与你的计算机的IP地址是同一网段的
192.168.13.1

局域网;城域网;广域网
广播
单播
广播风暴
arp协议
3.DNS服务器
网络连接:
- 域名解析 www.luffycity.com 47.95.64.113
www.oldboyedu.com 101.200.195.98
- 连接
sk = socket.socket()
sk.connect(('47.95.64.113',80))
...
问题来了,域名和IP的对应关系在哪里?
本地:
Win本地电脑:
C:\Windows\System32\drivers\etc\hosts
11.11.11.11 luffycicy.com
Linux/Mac电脑:
/etc/hosts
DNS服务器:全球顶级DNS服务器13台
4.总结:
(1). DHCP,自动位局域网内容电脑分配IP。
(2). 网关,路由器中连接交换机的口。
(3). IP,4个点分的十进制表示 192.11.111.11
(4). 子网掩码,
IP: 192.168.13.99
掩码:255.255.255.0
将挡住的IP位数作为网段。
未挡住的部分作为可变的值。
(5). 局域网/城域网/广域网
(6). arp协议
(7). DNS
四.socketserver模块
1.初识线程:

import time import threading def task(a1,a2,a3): time.sleep(2) print('拿快递') def play(): print('和女朋友去耍') def wm(): print('去拿外卖') # 创建一个线程 # 让该线程去执行任务:函数 t1 = threading.Thread(target=task,args=(1,2,3,)) # 去执行吧 t1.start() # 创建一个线程 # 让该线程去执行任务:函数 t2 = threading.Thread(target=play) # 去执行吧 t2.start() # 创建一个线程 # 让该线程去执行任务:函数 t3 = threading.Thread(target=wm) # 去执行吧 t3.start() print('玩扇子') print('煽风点火') print('耍贱...') 结果: 和女朋友去耍 去拿外卖 玩扇子 煽风点火 耍贱... 拿快递
2.线程执行任务:
import time import threading def task(n): print('开始执行任务:',n) time.sleep(10) print('...') print('任务%s 执行完毕:'%n) while True: name = input("请输入任务:") t = threading.Thread(target=task,args=(name,)) t.start()
10s后
3.socket和线程的配合
import time import socket import threading def task(conn): time.sleep(20) data = conn.recv(1024) print(data) conn.close() server = socket.socket() server.bind(('127.0.0.1',8001,)) server.listen(5) while True: conn,addr = server.accept() t = threading.Thread(target=task,args=(conn,)) t.start()
4.解析socketserver模块

import socketserver class MyServer(socketserver.BaseRequestHandler): def handle(self): pass # 编写代码 server = socketserver.ThreadingTCPServer(('192.168.13.84',8001,),MyServer) """ server.server_address = server_address server.RequestHandlerClass = RequestHandlerClass server.__is_shut_down = threading.Event() server.__shutdown_request = False server.socket = socket.... - socket.bind - socket.listen """ server.serve_forever()
五.赠送内容:uuid模块
import uuid v = str(uuid.uuid4()) print(v) 结果: b4375eea-5f0d-473b-a489-f89c5e70c95d
uuid模块在Python 2.5以后引入,接口包括:不可变对象UUID(UUID类)和函数uuid1()、uuid3()、uuid4()和uuid5(),后面的四个函数用于生成 RFC 4122 规范中指定的第1、3、4、5版UUID。使用uuid1()或uuid4()可以获得一个唯一的ID,uuid1()包含了主机的网络名称,uuid4()不涉及网络主机名,仅生成一个随机UUID,因此从隐私保护角度uuid4()更加安全。

""" 安装request模块 pip3 install requests """ import threading import requests import uuid url_list = [ 'https://www3.autoimg.cn/newsdfs/g28/M05/F9/98/120x90_0_autohomecar__ChsEnluQmUmARAhAAAFES6mpmTM281.jpg', 'https://www2.autoimg.cn/newsdfs/g28/M09/FC/06/120x90_0_autohomecar__ChcCR1uQlD6AT4P3AAGRMJX7834274.jpg', 'https://www2.autoimg.cn/newsdfs/g3/M00/C6/A9/120x90_0_autohomecar__ChsEkVuPsdqAQz3zAAEYvWuAspI061.jpg', ] def task(url): """""" """ 1. DNS解析,根据域名解析出IP 2. 创建socket客户端 sk = socket.socket() 3. 向服务端发起连接请求 sk.connect() 4. 发送数据(我要图片) sk.send(...) 5. 接收数据 sk.recv(8096) 接收到数据后写入文件。 """ ret = requests.get(url) file_name = str(uuid.uuid4()) + '.jpg' with open(file_name, mode='wb') as f: f.write(ret.content) for url in url_list: t = threading.Thread(target=task,args=(url,)) t.start()