一.知识点补充:
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
View Code
二.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协议
View Code
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()
View Code
五.赠送内容: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()
应用