一.知识点补充:

1.解释型语言和编译型语言

  编译型(目前有两种解释):

    先把代码编译成机器码 -> 机器寄存器去运行 :C语言

    先把代码编译成XXX -> 计算机找虚拟机执行代码 -> 机器码交给计算机去执行 :C语言,JAVA,C#

  解释型:

边解释边执行

2.Python中的作用域

Python中的函数是一个作用域

3.这里规定一下以后写元组的格式:

v = (1,2,3,)

python roots函数 实根 python中的root_python roots函数 实根

python roots函数 实根 python中的root_python roots函数 实根_02

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

python roots函数 实根 python中的root_python roots函数 实根

python roots函数 实根 python中的root_python roots函数 实根_02

局域网;城域网;广域网
     广播
   单播
   广播风暴
   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.初识线程:

python roots函数 实根 python中的root_python roots函数 实根

python roots函数 实根 python中的root_python roots函数 实根_02

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()

python roots函数 实根 python中的root_DNS_07

10s后

python roots函数 实根 python中的root_python_08

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模块

python roots函数 实根 python中的root_python roots函数 实根

python roots函数 实根 python中的root_python roots函数 实根_02

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

python roots函数 实根 python中的root_python_11

五.赠送内容: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()更加安全。

python roots函数 实根 python中的root_python roots函数 实根

python roots函数 实根 python中的root_python roots函数 实根_02

"""
安装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()

应用