1.面向对象和面向过程

面向过程

它是一种编程思想,强调的是以步骤(过程)为基础完成各种操作.

面向对象

它是一种编程思想,强调的是以对象为基础完成各种操作,它是基于面向过程的

说到面向对象,不得不提到的就是它的三大思想特点:

1.更符合人们的思考习惯

2.把复杂的事情简单化

3.把人们(程序员)从执行者变成指挥者

举例:贴合当时的场景,如买电脑,洗衣服

三大特征
封装
  • 隐藏对象的属性和实现细节,仅对外提供公共的访问方式
  • 好处:安全性,复用性 弊端:代码量增加
继承
  • 子类继承父类的成员
  • 好处:复用性 弊端:耦合性增强了
子类重写后继续访问父类功能

1.父类名.父类函数名(self) 精准访问,想找哪个父类就找哪个

2.super().父类方法名() 只能访问最近的那个父亲,有就用,没有就往后继续查找,适合单继承使用

多态
  • 同一个函数,接受不同的对象,有不同的效果
  • 好处:应用解耦,同函数,不同效果 弊端:无法精准限定类型

MRO机制

可以查看某个对象,在调用函数时的顺序,即:先找哪个类,后找哪个类

类名.mro() 或 类名._mro_

前提条件

1.要有继承
2.要有方法重写,不然无意义
3.要有父类引用指向子类对象

类方法和静态方法
类方法
  • 属于类的方法,可以通过 对象名. 或 类名. 的方式调用
  • 定义类方法时,必须使用装饰器@classmethod,且第1个参数必须表示 类对象
静态方法
  • 属于该类下所有对象所共享的方法,可以通过 对象名. 或 类名. 的方式调用
  • 定义静态方法的时候,必须使用装饰器@staticmethod,且参数传不传都可以

2.闭包和装饰器

闭包

  • 内部函数 使用了外部函数的变量,这种写法叫闭包,可以保存外部函数中的变量,延长其生命周期
  • 格式
# def 外部函数名(形参列表):
#     外部函数的(局部)变量
#     def 内部函数名(形参列表):
#         使用外部函数的变量
#     return 内部函数名
  • 前提条件
    • 有嵌套 外部函数嵌套内部函数
    • 有引用 内部函数中使用外部函数的变量
    • 有返回 外部函数中 返回内部函数名(对象)

nonlocal关键字

  • 可以实现在内部函数中修改外部函数的变量值
  • global:声明全局变量

装饰器

  • 它的本质是一个闭包函数,目的是在不改变原有函数的基础上,对其功能做增强
  • 前提条件
    • 有嵌套
    • 有引用
    • 有返回
    • 有额外功能
  • 装饰器的用法
# 格式1:传统写法
#     装饰后的函数名=装饰器名(被装饰的函数名)
# 格式2:语法糖
#     在要被装饰的原函数前面加上 @装饰器名,之后直接调用原函数即可
# 装饰器的内部函数格式要与 被装饰函数的格式一致
# 即:原函数是无参无返回值的,装饰器内部函数也要是无参无返回值的
#    原函数是有参有返回值的,装饰器内部函数也要是有参有返回值的

深浅拷贝

  • 主要是针对可变类型来讲的,深拷贝拷贝所有层(可变),浅拷贝只拷贝第1层(可变)

若针对不可变类型,则用法和普通赋值一样

浅拷贝
  • copy模块中的copy()
深拷贝
  • copy模块的deepcopy()函数

3.网编和多线程

网络编程介绍

就是用来实现网络互联的 不同计算机上运行的程序间可以进行数据交互

三要素
  • IP地址

网络环境下每一台计算机的唯一标识

分类:
IPV4,4字节,十进制,例如:192.168.100

​ IPV6,8字节,十六进制

两个DOS命令:

​ 查看IP:

​ widows:ipconfig

​ Linux,Mac:ifconfig

​ 测试网络连接:

​ ping ip地址或者域名

  • 端口

用于标识进程的逻辑地址,通过端口来找到指定的进程

范围:0-65535,其中0-1023已经被系统占用或者用作保留端口,自定义端口时尽量规避这个范围

  • 协议

定义通信规则,符号协议则可以通信,否则无法正常通信

常用的协议:

​ TCP(这个用的最多)和UDP

TCP特点:
1.面向有连接

​ 2.采用字节流传输数据,理论无大小限制

​ 3.安全(可靠)协议

​ 4.效率相对较低

​ 5.区分客户端和服务器端

创建Socket对象
#网络编程介绍:
# 网络编程也叫网络通信,Socket通信,即通信双方都有自己的Socket对象
# 数据在Socket之间通过 数据报包(UDP协议) 或者 字节流(TCP协议) 进行传输
import socket
# 参1:Address Family ,地址族:Ipv4 还是 Ipv6,默认值:AF_INET(Ipv4) AF_INET6(Ipv6)
# 参2:Socket Type,套接字类型:TCP还是UDP,默认值:SOCK_STREAM(TCP) SOCK_DGRAM(UDP)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print(s)
多任务简介
  • 概述

让多个任务’同时’执行,目的是:充分利用CPU资源,提高程序的执行效率

  • 方式
    • 并发:针对于单核CPU来讲,多个任务同时请求执行时,CPU做高效切换即可
    • 并行:针对于多核CPU来讲,多个任务同时执行
多进程入门案例
'''
实现方式:
# 1.导包
# 2.创建进程对象,关联目标函数
# 3.启动进程
'''

import multiprocessing
import time
def coding():
    for i in range(1,11):
        time.sleep(0.1)
        print(f'正在学习第{i}章的内容')
def music ():
    for i in range(1,11):
        time.sleep(0.1)
        print(f'正在听第{i}首歌')
if __name__ == '__main__':
    p1 = multiprocessing.Process(target=coding)
    p2 = multiprocessing.Process(target=music)
    p1.start()
    p2.start()
带参数的多进程
'''
进程传参有两种方式
1. 通过args方式,接受所有的位置参数,以元组的形式传递
2. 通过kwargs方式,接受所有的关键字参数,以字典的形式传递
'''
import multiprocessing,time
def coding(name,num):
    for i in range(num):
        time.sleep(0.1)
        print(f'{name} coding {i}')
def music(name,num):
    for i in range(num):
        time.sleep(0.1)
        print(f'{name} music {i}....')
if __name__ == '__main__':
    p1 = multiprocessing.Process(target=coding,args=('小帅',20))
    p2 = multiprocessing.Process(target=music,kwargs={'name':'小王','num':10})
    p1.start()
    p2.start()

更多推荐