py2/py3区别, 列表生成式, 网络编程, socketserver, 线程, uuid模块
一. py2/py3区别
- 编码&字符串
字符串:
py2:
unicode v = u"root" 本质上用unicode存储(万国码)
(str/bytes) v = "root" 本质用字节存储
py3:
str v = "root" 本质上用unicode存储(万国码)
bytes v = b"root" 本质上用字节存储
编码:
py2:
- ascii
文件头可以修改:#-*- encoding:utf-8 -*-
py3:
- utf-8
文件头可以修改:#-*- encoding:utf-8 -*-
注意:文件是如何存储?
- 继承
py2: 经典类/新式类
py3: 新式类
- 范围
py2:range/xrange
py3: range
- 输入
py2: v1 = raw_input('请输入用户名:')
py3: v2 = input('请输入用户名:')
- 打印
py2: print 'xx'
py3: print(123)
二. 列表生成式
v = [lambda x: x + i for i in range(10)]
print(v) # 10个内存地址组成的列表
三. 网络编程
1. 我的电脑有网卡,网卡里有mac地址
2. 我到某个地方插上网线,路由器或交换机中的DHCP服务为我自动分配IP地址。
IP: 192.168.13.84
IPv4
00000000.00000000.00000000.00000000
0~255 0~255 0~255 0~255
IPv6
00000000.00000000.00000000.00000000.00000000.00000000
子网掩码:255.255.255.0
192.168.13.84
255.255.255.0 # 也可以是255.255.254.0
192.168.12.84
255.255.255.0
将挡住的IP位数作为网段。
未挡住的部分作为可变的值。
网关IP:192.168.13.1
局域网内、城域网、广域网:
广播
单播
广播风暴
arp协议
DNS
网络连接:
- 域名解析
www.bitfinex.com 127.91.64.33
- 连接
sk = socket.socket()
sk.connect(('47.95.64.113',80))
...
问题来了,域名和IP的对应关系在哪里?
本地:
Win本地电脑:
C:\Windows\System32\drivers\etc\hosts
11.11.11.11 bitifnex.com
Linux/Mac电脑:
/etc/hosts
DNS服务器:全球顶级DNS服务器13台
www.bitfinex.com 127.91.64.33
创业:
a. 租一个服务器+公网IP
b. 租域名
域名+IP解析
四. socketserver
注意:如果想要提高效率可以使用多线程。
""" 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()
五. 线程
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()
六. uuid模块
import uuid v = str(uuid.uuid4()) print(v)