05 2024 档案
摘要:【一】未加锁会产生的问题 所有子线程都会进行阻塞操作,导致最后的改变只是改了一次 from threading import Thread import time money = 100 def task(): global money # 模拟获取到车票信息 temp = money # 模拟网络
阅读全文
摘要:【一】主线程死亡,子线程未死亡 主线程结束运行后不会马上结束,而是等待其他非守护子线程结束之后才会结束 如果主线程死亡就代表者主进程也死亡,随之而来的是所有子线程的死亡 from threading import Thread import time def work(name): print(f'
阅读全文
摘要:【一】threading模块开启线程的两种方式 【1】直接调用Thread from threading import Thread import time def task(name): print(f'{name} is starting') time.sleep(3) print(f'{nam
阅读全文
摘要:【一】什么是线程 【1】介绍 每个进程有一个地址空间,而且默认就有一个控制线程 线程就是一条流水线工作的过程 所以进程只是用来把资源集中到一起,而线程才是cpu上的执行单位 多线程的概念是在一个进程中存在多个控制线程,多个控制线程共享该进程的地址空间,相当于一个车间内有多条流水线,都共用一个车间的资
阅读全文
摘要:【一】管道介绍 multiprocessing模块支持两种形式除了队列还有管道 【1】创建管道的类 # 在进程之间创建一条管道,并返回元组(conn1,conn2),其中conn1,conn2表示管道两端的连接对象 # 必须在产生Process对象之前产生管道 from multiprocessin
阅读全文
摘要:【一】引入 【1】什么是进程间通信 进程间通信(Inter-Process Communication, IPC)是指两个或多个进程之间进行信息交换的过程 【2】如何实现进程间通信 借助于消息队列,进程可以将消息放入队列中,然后由另一个进程从队列中取出 这种通信方式是非阻塞的,即发送进程不需要等待接
阅读全文
摘要:【一】什么是互斥锁 互斥锁是一种用于多线程编程中控制对共享资源访问的机制 限制当前时间段只能由当前进程使用,当前进程使用完成后才能其他进程继续使用 基本原理是在对共享资源进行访问前加锁,使得其他线程无法访问该资源,当访问完成后再解锁,使得其他线程可以进行访问 【二】多个进程共享同一打印终端 进程间的
阅读全文
摘要:【一】什么是守护进程 守护进程是在计算机系统启动时就已经运行,并且一直在后台运行的一类特殊进程。 特殊在只要系统不关机,就会一直存在 守护进程往往是由系统管理员手动启动的,它们可以在系统启动时自动启动,一直运行在后台,直到系统关闭或被停止 常见的守护进程包括网络服务 (如 web 服务器、邮件服务器
阅读全文
摘要:【一】引入 在unix/linux中,正常情况下,子进程是通过父进程创建的,子进程在创建新的进程 子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程到底什么时候结束 当一个进程完成它的工作终止之后,它的父进程需要调用wait()或者waitpid()系统调用取得子进程的终止状态 【
阅读全文
摘要:【一】multiprocessing模块介绍 multiprocessing模块用来开启子进程,并在子进程中执行我们定制的任务(比如函数),该模块与多线程模块threading的编程接口类似 multiprocessing模块的功能众多: 支持子进程、通信和共享数据、执行不同形式的同步 提供了Pro
阅读全文
摘要:【一】什么是进程 【1】进程概念 正在进行的一个过程或者说一个任务 而负责执行任务则是cpu 进程其实就是一个正在运行的程序 【2】单任务 单核+多道,实现多个进程的并发执行 同一时刻只能做一个任务(cpu同一时间只能干一个活) 【3】多任务 同一时刻可以做多个任务 【二】程序和进程的区别 程序仅仅
阅读全文
摘要:【一】什么是粘包 只有TCP有粘包现象,UDP永远不会粘包 【1】TCP TCP(transport control protocol,传输控制协议)是面向连接的,面向流的,提供高可靠性服务。 收发两端(客户端和服务器端)都要有一一成对的socket 因此,发送端为了将多个发往接收端的包,更有效的发
阅读全文
摘要:【一】什么是socket Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。 在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面 对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。 所以,我们
阅读全文
摘要:【一】常见的网络架构模式 【1】CS模型 C是英文单词“Client”的首字母,即客户端的意思 C/S就是“Client/Server”的缩写,即“客户端/服务器”模式。 例如:拼多多APP、PC上的有道云笔记等等 【2】BS模型 B是英文单词“Browser”的首字母,即浏览器的意思; S是英文单
阅读全文
摘要:【一】单例模式介绍 【1】什么是单例模式 一个类只允许创建一个对象(或者实例),那这个类就是一个单例类,这种设计模式就叫作单例设计模式,简称单例模式 【2】为什么要学单例模式 当一个类的功能比较单一,只需要一个实例对象就可以完成需求时,就可以使用单例模式来节省内存资源 【3】如何实现一个单例 在py
阅读全文
摘要:【一】什么是元类 Python中一切皆对象,八大基本数据类型是对象,类实例化得到的对象也是对象,其实类本身也是一种对象 元类是所有类的基类,包括object class Student(object): def __init__(self, name): self.name = name stude
阅读全文
摘要:【一】内置方法引入 __init__ :初始化对象时触发 __del__ :删除类时触发 __new__ :构造类时触发 __str__ :str函数或者print函数触发 __repr__ :repr或者交互式解释器触发 __doc__ :打印类内的注释内容 __enter__ :打开文档触发 _
阅读全文
摘要:【一】什么是反射 反射是一种程序可以访问、检测和修改其本身状态或行为的能力 在 Python 中,反射主要指通过字符串的形式操作对象的属性 python中的一切事物都是对象,都可以使用反射 【二】反射方法 getattr(object, key):获取对象的属性值,如果属性不存在,可提供默认值 ha
阅读全文
摘要:【一】绑定方法和非绑定方法介绍 【1】绑定方法 绑定给谁,谁来调用就自动将它本身当作第一个参数传入 (1)绑定到类的方法 用classmethod装饰器装饰的方法 为类量身定制 类.boud_method(),自动将类当作第一个参数传入 其实对象也可调用,但仍将类当作第一个参数传入 (2)绑定到对象
阅读全文
摘要:【一】多态 【1】什么是多态 多态指的是一类事物有多种形态 【2】示例 #动物有多种形态:人、狗、猪等 import abc # 总的类:动物 class Animal(metaclass=abc.ABCMeta): @abc.abstractmethod def talk(self): pass
阅读全文
摘要:【一】什么是抽象类 与java一样,python也有抽象类的概念但是同样需要借助模块实现,抽象类是一个特殊的类,它的特殊之处在于只能被继承,不能被实例化 【二】为什么要有抽象类 如果说类是从一堆对象中抽取相同的内容而来的,那么抽象类就是从一堆类中抽取相同的内容而来的,内容包括数据属性和函数属性 从实
阅读全文
摘要:【一】派生 【1】什么是派生 派生是指,子类继承父类,派生出自己的属性与方法,并且重用父类的属性与方法 【2】派生的属性与方法 子类可以派生出自己新的属性,在进行属性查找时,子类中的属性名会优先于父类被查找 class School(object): school = '北京大学' def __in
阅读全文
摘要:【一】什么是继承 继承是一种创建新类的方式,新建的类可以继承一个或多个父类 父类又可称为基类或超类,新建的类称为派生类或子类 子类通过继承父类,减少了重复代码的使用 【二】继承的分类 【1】单继承 单继承就是只继承一个父类的子类 # 父类 class School(object): school =
阅读全文
摘要:【一】面向对象的三大特性 面向对象的三大特性:封装、继承、多态 其中最重要的就是封装,封装就是将数据和功能整合到一起 我们可以对封装在类和对象中的属性进行访问的控制,有隐藏的和开发的接口 【1】什么是封装 封装是对具体对象的一种抽象 封装就是将某些数据和功能隐藏起来,只能通过程序内部查看,而外部看不
阅读全文
摘要:【一】人狗大战小游戏 【1】游戏前提分析 人可以打狗,狗掉血,狗可以咬人,人掉血 人的属性有名字、年龄、伤害、血量、类型 狗的属性有名字、年龄、伤害、血量、类型 【2】游戏实现 (1)定义人和狗的属性 # 【1】用字典定义,代码较冗余 dog1 = { 'name': '狗蛋', 'd_type':
阅读全文
摘要:【一】函数式简单配置 import logging logging.debug('debug message') logging.info('info message') logging.warning('warning message') logging.error('error message'
阅读全文
摘要:【一】什么是摘要算法 Python的hashlib提供了常见的摘要算法,如MD5、SHA1等等 摘要算法又称哈希算法、散列算法 它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示) 摘要算法就是通过摘要函数f()对任意长度的数据data计算出固定长度的摘要dige
阅读全文
摘要:【一】介绍与模块导入 subprocess模块允许我们启动一个新进程,并连接到它们的输入/输出/错误管道,从而获取返回值。 简单理解就是:使用我们自己的电脑去链接别人的电脑 (socket模块) 模块导入: import subprocess 【二】run方法 import subprocess d
阅读全文
摘要:【一】序列化和反序列化 【1】什么是序列化 将原本的字典、列表等内容转换成一个字符串的过程就叫做序列化 【2】为什么要有序列化 比如,我们在python代码中计算的一个数据需要给另外一段程序使用,那我们怎么给? 现在我们能想到的方法就是存在文件里 然后另一个 python 程序再从文件里读出来。 但
阅读全文
摘要:【一】导入模块 import random 【二】随机小数 # 【1】默认区间的小数(random):0~1之间的小数 import random num = random.random() print(num) # 0.8286527462581516 # 【2】指定区间的小数(uniform)
阅读全文
摘要:【一】导入模块 import os 【二】文件路径相关操作 _file__指当前文件 (1)获取当前文件路径(abspath) import os file_path = os.path.abspath(__file__) print(file_path) # D:\Python\pythonPro
阅读全文
摘要:【一】表示时间的三种方式 时间戳 元祖(struct_time):年,月,日,时,分,秒,毫秒,微妙 格式化的时间字符串:xx年-xx月-xx日 时:分:秒 【二】time模块 (1)导入模块 import time (2)时间戳 时间戳是指格林威治时间1970年01月01日00时00分00秒(北京
阅读全文
摘要:【一】正则语法 【1】引入 正则:按照指定的匹配规则从字符串中匹配或者截取相应的内容 # 手机号验证(必须是11位的数字,要是正常的手机号开头:13 15 17 18 19) # 正常验证手机号 def check_phone_number(): phone = input("请输入手机号:").s
阅读全文
摘要:【一】什么是内置函数 内置函数就是Python给你提供的, 拿来直接用的函数 目前共有68个内置函数 Built-in Functions Aabs()aiter()all()any()anext()ascii() Bbin()bool()breakpoint()bytearray()bytes()
阅读全文
摘要:【一】二分法 【1】介绍 二分法也称为折半法,是一种在有序数组中查找特定元素的搜索算法 【2】思路 首先,从数组的中间元素开始搜索,如果该元素正好是目标元素,则搜索过程结束,否则执行下一步 如果目标元素大于/小于中间元素,则在数组大于/小于中间元素的那一半区域查找,然后重复步骤的操作 如果某一步数组
阅读全文
摘要:【一】模块介绍 【1】什么是模块 在Python中,一个py文件就是一个模块,文件名为xxx.py模块名则是xxx,导入模块可以引用模块中已经写好的功能 使用模块既保证了代码的重用性,又增强了程序的结构性和可维护性 另外除了自定义模块外,我们还可以导入使用内置或第三方模块提供的现成功能 【2】模块的
阅读全文
摘要:【一】什么是生成器 Python中的生成器是一种特殊的迭代器 可以在需要时生成数据,而不必提前从内存中生成并存储整个数据集 通过生成器,可以逐个生成序列中的元素,而无需一次性生成整个序列 【二】生成器的创建方式 【1】列表推导式 # 列表生成式生成列表 num_list = [i for i in
阅读全文
摘要:【一】迭代器介绍 迭代器就是迭代取值的工具,而迭代是重复反馈过程的活动 其目的通常是为了逼近所需的目标或结果,而每一次迭代得到的结果会作为下一次迭代的初始值 #只会重复让你输入信息,并不是迭代过程 while True: msg = input("请输入信息:").strip() print(msg
阅读全文
摘要:【一】装饰器 【1】什么是装饰器 装饰代指为被装饰对象添加新的功能,器代指器具/工具,装饰器与被装饰的对象均可以是任意可调用对象。 装饰器的作用就是在不修改被装饰对象源代码和调用方式的前提下为被装饰对象添加额外的功能 【2】装饰器的用途 软件包含的所有功能的源代码以及调用方式,都应该避免修改,否则一
阅读全文
摘要:【一】函数对象 函数对象是指函数可以被当成数据来处理,python中一切皆为对象 【1】函数可以被引用 def add(a, b): return a + b res = add(3, 4) print(res) # 7 【2】函数作为容器类型的元素 def add(a, b): return a
阅读全文
摘要:【一】匿名函数的定义 在 Python 里有两类函数: 用 def 关键词定义的正规函数 用 lambda 关键词定义的匿名函数 lambda 参数: 表达式 lambda:定义匿名函数的关键词。 函数参数它们可以是位置参数、默认参数、关键字参数 表达式,输入函数参数,输出一些值,表达式本身结果就是
阅读全文
摘要:【一】名称空间 【1】什么是名称空间 名称空间就是存放函数名与函数值对应关系的地方 内存空间就是申请一块内存空间,然后将函数值放到内存空间里 再将变量名和变量值绑定存到名称空间里 程序执行期间最多会存在三种名称空间 【2】内置名称空间 会跟着python解释器的启动而生成,关闭而结束 一般会用来存放
阅读全文
摘要:【一】引言 在Python 3.5版本后引入的typing模块为Python的静态类型注解提供了支持。 这个模块在增强代码可读性和维护性方面提供了帮助。 本文将深入探讨typing模块,介绍其基本概念、常用类型注解以及使用示例,以帮助读者更全面地了解和应用静态类型注解。 【二】基本类型注解 【1】基
阅读全文
摘要:【一】形参和实参 函数的参数分为形参和实参,形参就是定义在函数名后面括号里的参数(用来接收外部传来的值),实参就是调用函数时,括号里传进去的值(值可以是常量、变量、表达式) def add(x, y): return x + y #实参是常量 print(add(3, 4)) #输出 7 #实参是变
阅读全文
摘要:【一】函数的基本使用 我们在前面的学习中,所有的功能代码都集中在一块,需要使用同一功能时,需重复编写该功能的代码,这样比较麻烦,当我们到后面代码变得越来越长,也不利于我们修改其中一个小功能的代码 我们完全可以从现实生活中找到简化程序设计的方案: 比如一个修理工会事先准备好螺丝刀、锤子等工具,这样在进
阅读全文
摘要:【一】异常处理 【一】什么是异常 异常是程序运行时可能发生的错误或意外情况 当出现异常时,程序的正常流程会被中断,出现报错界面 【二】异常分类 在Python中异常分为内建异常和用户自定义异常 【1】BaseException(所有异常的基类) SystemExit:解释器请求退出 Keyboard
阅读全文
摘要:【一】深浅拷贝 【1】深浅拷贝问题 如果是浅拷贝,只会复制一层,如果拷贝的对象中有可变数据类型,修改可变数据类型还会影响拷贝的对象 如果是深拷贝,完整复制,无论可变或不可变,都是创建出新的来,无法怎么修改原对象,都不会对拷贝出的对象造成影响 (1)浅拷贝 对于原对象中的可变数据类型进行修改操作时,拷
阅读全文
摘要:【一】元祖类型(tuple) 【1】定义 元祖类型是有序且不可变的数据类型,通常使用小括号定义(也可以使用逗号) #用逗号定义 num_tuple = 1, 2, 3, 4, 5 #用小括号定义 num_tuple = (1, 2, 3, 4, 5) 【2】内置方法 (1)类型强转 #使用tuple
阅读全文
摘要:【一】字符串类型的内置方法(熟悉) 【1】查找 (1)find方法 #【1】默认从左到右开始查找,找得到则返回元素所在的索引位置 name = 'ligo' str = name.find('i') print(str) # 输出 1 #【2】也可在区间内寻找,找不到则返回-1 str = name
阅读全文
摘要:【一】数字类型 【1】整数类型(int) (1)定义 直接用整数定义,整数类型的值不能修改 num = 6 (2)内置方法 int.bit_length() #返回整数的二进制表示中最高位的位数,不包括符号和前导零。 a = 10 b = a.bit_length() print(b) # 输出 4
阅读全文
摘要:【一】流程控制语句介绍 程序是由语句构成,而流程控制语句是用来控制程序中每条语句执行顺序的语句 流程控制方式有 顺序结构 分支结构 循环结构 最简单最常用的就是顺序结构,执行方式是从上至下一句一句来 【二】顺序结构 【1】什么是顺序结构 顺序结构是指按照代码书写的顺序,一条语句接着一条语句执行,没有
阅读全文
摘要:【一】参考网站 菜鸟教程:https://www.runoob.com/python/python-operators.html 【二】算数运算符 python支持的算数运算符与数学的运算符号是一样的 # 【1】加法运算符 a = 3 b = 4 c = a + b print(c) # 输出 7
阅读全文
摘要:【一】什么是与用户交互 交互就是输入和输出 input输入数据,print输出数据 【二】为什么要与用户交互 将计算机拟人化,实现像人一样能和用户进行交流 我们需要一个平台,也就是计算机来支持用户实现数据的输入和输出 【三】如何与用户交互 【1】输入(input) (1)Python3 在Pytho
阅读全文
摘要:【一】数据类型引入 【1】为什么要学习变量和基本数据类型 变量能帮助我们在程序中可以根据自己的意愿去修改数据,去展现不一样的效果 基本数据类型是让我们更好的理解不同类型的数据在电脑中是怎么处理的 【2】基本数据类型介绍 数字类型(整数和浮点数) 字符串类型 列表类型 字典类型 布尔类型 元祖类型 集
阅读全文
摘要:【一】注释语法 【1】什么是注释 就是对代码的解释,方便自己更好理解代码 【2】为什么要注释 帮助自己日后更好看懂一段久远的代码,能根据注释想起自己写这段代码时的思路 【3】如何使用注释 单行注释 用#号加内容 多行注释(适合代码块) 可以用三对双引号""" """ 也可以用三对单引号''' '''
阅读全文
摘要:【一】常用的快捷键 【1】基本编辑快捷键 Ctrl + Space:基本的代码完成(类、方法、属性) Ctrl + Alt + Space:快速导入任意类 Ctrl + Shift + Enter:语句完成 Ctrl + P:参数信息(在方法中调用参数) Ctrl + Q:快速查看文档 F1:外部文
阅读全文
摘要:【一】pip换源 【1】问题描述 由于pip install速度会非常的慢,所以我们要用其他方法区安装pip第三方包 【2】永久更换pip源 永久更换pip源,这样我们下次使用就不用再麻烦的安装一遍pip源 打开pycharm的控制台或者终端,输入下面的命令: pip config set glob
阅读全文
摘要:【一】Python解释器安裝(windows) 【1】进入Python官网 https://www.python.org 【2】选择Windows系统 【3】选择解释器版本3.10.11 【4】安装解释器 (1)双击安装程序 选择最下面的选项 (2)选择安装包管理工具 全部勾上 (3)选择安装位置
阅读全文
摘要:【一】编程语言介绍 【1】机器语言 (1)机器语言是什么 机器语言就是计算机可以理解的语言,可以直接通过机器语言操作我们的硬件 计算机是基于电工作的,高频是0,低频是1 计算机通过控制高低频变化来工作 (2)机器指令 通过制高低电频的变化组成一系列的指令就叫机器指令,能直接控制计算 (3)如何写机器
阅读全文
摘要:【一】编程和编程语言 【1】什么是语言 语言是人与人之间交流的媒介,例如各个语种,中国的各个地方的方言 【2】什么是编程 编程就是指将人类思维逻辑转化成计算机能够理解和执行的指令 【3】什么是编程语言 编程语言就是人与计算机之间交流的媒介 【4】为什么要有编程语言 人类可以通过计算机进行更高效的工作
阅读全文