一.知識點補充:
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()