- 博客(40)
- 收藏
- 关注
原创 41.协程
1.死锁现象from threading import Thread, Lockimport timemutexA = Lock()mutexB = Lock()# 类只要加括号多次 产生的肯定是不同的对象# 如果你想要实现多次加括号等到的是相同的对象 单例模式class MyThead(Thread): def run(self): self.func1() self.func2() def func1(self):
2021-09-09 20:51:25
162
原创 39.进程(下)
1.僵尸进程与孤儿进程(了解)# 僵尸进程"""死了但是没有死透当你开设了子进程之后 该进程死后不会立刻释放占用的进程号因为我要让父进程能够查看到它开设的子进程的一些基本信息 占用的pid号 运行时间。。。所有的进程都会步入僵尸进程 父进程不死并且在无限制的创建子进程并且子进程也不结束 回收子进程占用的pid号 父进程等待子进程运行结束 父进程调用join方法"""# 孤儿进程"""子进程存活,父进程意外死亡操作系统会开设一个“儿童福利院”专门管理孤儿进程回收相关资源
2021-09-09 15:59:09
125
原创 38.进程(上)
1. 操作系统发展史:https://www.cnblogs.com/Dominic-Ji/articles/10929381.html2.多道技术:单核实现并发的效果1.必备知识并发:看起来像同时运行的就可以称之为并发并行:真正意义上的同时执行ps:* 并行肯定算并发* 单核的计算机肯定不能实现并行,但是可以实现并发!!!补充:我们直接假设单核就是一个核,干活的就一个人,不要考虑cpu里面的内核数2.多道技术重点知识* 空间上的复用 多个程序公用一套计算机.
2021-09-09 07:55:43
122
原创 37.基于tcp协议远程执行命令+服务器并发
原课程视频中,对这一块儿讲得可谓又臭又长,实在忍不了了,必须吐槽一句!这样在以后如果有机会复习的时候,能够有所心理准备。1.基于tcp协议远程执行命令1.粘包问题1.粘包问题出现的原因:1、tcp是流式协议,数据像水流一样粘在一起,没有任何边界区分2、收数据没收干净,有残留,就会下一次结果混淆在一起2.解决粘包问题思路:1、拿到数据的总大小total_size2、recv_size=0,循环接收,每接收一次,recv_size+=接收的长度3、直到recv_size=tota
2021-09-09 06:23:36
339
原创 36.Socket套接字
Socket是应用层与tcp/ip协议之间的中间抽象层1实现TCP协议通讯1.实现Socket基础版本1.客户端import socket#1、买手机phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 流式协议=》tcp协议#2、拨通服务端电话phone.connect(('127.0.0.1',8081))#3、通信import timetime.sleep(10)phone.send('hello eg
2021-09-06 09:39:02
119
原创 34-35.异常处理+网络编程
1.异常处理1、什么是异常异常是程序发生错误的信号,程序一旦出错就会抛出异常,程序的运行随即终止print('start....')[1,2,3][1000]print('stop...')1.1 异常处理的三个特征异常的追踪信息异常的类型异常的内容2、为何处理异常为了增强程序的健壮性,即便是程序运行过程中出错了,也不要终止程序而是捕捉异常并处理:将出错信息记录到日志内3、如何处理异常?3.1 语法上的错误SyntaxError,必须在程序运行前就改正
2021-08-26 21:02:36
121
原创 33.反射+内置方法
1.反射1.什么是反射?指的是在程序运行过程中可以“动态”获取对象的属性,是动态语言的关键属性2.为何用反射?为了在不看源码的情况下,获取了一个对象,就可以知道这个对象包含哪些属性,怎么用。动态语言声明变量,不需要在定义的时候指定类型,而是在被调用的时候动态指定类型。这样就产生了一个需求,当拿到一个变量时,不知道对象是怎样定义的时候,是不知道变量类型,也不知道变量内的属性的,这样会很影响使用,于是需要反射,帮助程序员在拿到“陌生”变量后,调用变量之前,提前知道变量的属性。3.如何用反
2021-08-26 08:57:08
95
原创 31-32.选课系统
1.项目说明文件 README角色: 学校、学员、课程、讲师、管理员要求:1. 创建北京、上海 2 所学校 ---> 管理员创建学校2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开3. 课程包含,周期,价格,通过学校创建课程4. 创建讲师5. 创建学员时,选择学校,关联班级5.1 创建讲师6. 提供两个角色接口6.1 学员视图, 可以注册,选择课程(等同于选择班级)6.2 讲师视图, 讲师可管理自己的课程, 上课时选.
2021-08-10 21:55:48
217
原创 29-30.面向对象(下)
1.property装饰器(感觉没有什么硬性的应用场景)装饰器是在不修改被装饰对象源代码以及调用方式的前提下,为被装饰对象添加新功能的可调用对象。property是一个装饰器,是用来绑定给对象的方法伪造成一个数据属性class People: def __init__(self, name, weight, height): self.name = name self.weight = weight self.height = heigh
2021-08-10 16:00:03
89
原创 27-28.面向对象(上)
1.定义面向过程:核心就是“过程”二字过程的终极奥义就是将程序流程化过程是“流水线”,用来分步解决问题的面向对象:核心是“对象”二字对象的终极奥义就是将程序“整合”对象是“容器”,用来盛放数据与功能的2.类类也是“容器”,用来存放同类对象共有的数据和功能类体代码是在类定义阶段就会立即执行,会产生类的命名空间(函数是被调用时执行)1.先定义类class Student: # 1、变量的定义 stu_school='oldboy' co
2021-08-09 22:21:12
104
原创 26.ATM+购物车 项目开发实战(下)
1.配置信息settings.pyconf/settings.py'''存放配置信息'''import os# 获取项目根目录路径BASE_PATH = os.path.dirname( os.path.dirname(__file__))# 获取user_data文件夹目录路径USER_DATA_PATH = os.path.join( BASE_PATH, 'db', 'user_data')# print(USER_DATA_PATH)"""l
2021-08-09 18:01:47
121
原创 3.数据解析
1.数据解析分类:正则bs4(只有python中能用)xpath(重点)2.数据解析原理:解析的局部的文本内容都会在标签之间或标签的属性中进行存储1.进行指定标签的定位2.标签或标签对应的属性中存储的数据值进行提取(解析)3.正则解析:# 正则表达式# 贪婪匹配.*# 和懒惰匹配.*?# import re## str1 = '<div class="jay">周杰伦</div><div class="jj">林俊杰<
2021-07-30 00:12:12
392
原创 2.requests模块入门
1.python中关于网络请求的模块:urllib模块 比较古老的模块,不怎么使用了requests模块 简捷高效2.requests模块:python中原生的一款基于网络请求的模块,功能强大,效率高。作用:模拟浏览器发请求。如何使用:指定url发起请求获取响应数据数据解析持久化储存环境安装:pip install requests3.实战1.需求:爬取搜狗首页的页面数据import requestsif __name__ =="_
2021-07-29 12:41:42
243
原创 1.爬虫基础简介
1.原教程地址:https://www.bilibili.com/video/BV1ha4y1H7sx2.什么是爬虫?通过编写程序,模仿浏览器操作,然后从互联网上抓去数据的过程。3.爬虫违法么?法律上不被禁止有一定法律风险robots.txt协议:君子协议,规定了哪些数据可以被爬取,哪些不可以被爬取。4.爬虫通过应用场景的分类1.通用爬虫抓取系统重要组成部分,抓取的是一张页面数据。2.聚焦爬虫建立在通用爬虫的基础之上,抓取的是页面中特定的局部内容
2021-07-29 12:16:47
116
原创 25.ATM+购物车 项目开发实战(上)
1.编写README.md在pycharm中,新建的文件如果扩展名是md,会自动打开Markdown编辑器。# 项目的说明书## 项目:ATM + 购物车# 项目需求: 1.额度15000或自定义 --> 注册功能 2.实现购物商城,买东西加入购物车,调用信用卡接口结账 --> 购物功能、支付功能 3.可以提现,手续费5% --> 提现功能 4.支持多账户登录 --> 登录功能 5.支持账户间转账 --&g
2021-07-19 21:08:31
238
原创 24.日志logging模块+正则表达式re模块
1.日志对于程序来说非常重要,不能轻易删的东西,即使四五年都用不上,也要好好保存。1.日志级别import logginglogging.basicConfig( # 1.日志的输出位置:1.终端 2.文件 # filename='access.log',#不指定,默认打印到终端 # 2.日志格式: format='%(asctime)s-%(name)s-%(levelname)s-%(module)s:%(message)s', # 3.时间
2021-07-18 18:26:13
389
原创 23.序列化+hash(哈希)介绍
1.序列化1.什么是序列化&反序列化?序列化:内存中的数据类型--->序列化----->特定格式(json格式或pickle格式)反序列化:内存中的数据类型<---序列化<-----特定格式(json格式或pickle格式)土办法:{'a':1,'b':2}--->序列化str({'a':1,'b':2})---->"{'a':1,'b':2}"{'a':1,'b':2}--->反序列化eval({'a':1,'b':2})---
2021-07-18 14:44:46
802
原创 22.时间模块+random,os,sys模块+打印进度条
1.时间模块1.time时间分为三种格式:import time#1.时间戳:从1970年到现在经过的秒数#作用:用于时间间隔的计算print(time.time())#2.按照某种格式显示时间:#作用:用于时间的展示print(time.strftime('%Y-%m-%d %H-%M-%S %p'))#2021-07-17 14-19-31 PM #年月日时分秒下午PM上午AMprint(time.strftime('%Y-%m-%d %X %p'))#2021-07-1
2021-07-17 23:57:03
84
原创 python导入random报错TypeError: ‘module‘ object is not callable
在开视频介绍到random的时候,照着视频中写的最基本的:import randomprint(random.random())运行以后,居然报错了:原来是因为.py文件名起的有问题,我起的名:random.py,改成random模块.py就解决啦!...
2021-07-17 22:10:50
2432
1
原创 21.模块规范+软件开发目录规范
1.模块规范1.一个.py文件的两种用途1.被当做程序运行2.被当做模块导入当foo.py文件当做文件被运行时,__name__=='__main__'当foo.py文件当做模块被导入时,__name__=='foo'当编写模块foo.py的内置方法,想要运行测试时:def get(): print('get')if __name__ == '__main__': get()#get2.from导入用from方式可以不用加前缀,但容易混淆
2021-07-17 03:40:16
175
原创 20.二分法+面向过程编程+函数式编程+模块介绍
1.二分法算法:是高效解决问题的办法算法之二分法:需求:有一个按照从小到大顺序排列的数字列表,需要从数字列表中找到我们想要的那个数字,如何做最高效?(不能用内置方法)方案一:整体遍历,效率太低nums=[-3,1,5,10,13,21,43,77,89]find_num=13for i in nums: if find_num==i: print('find it') break方案二:二分法nums=[-3,1,5,10,
2021-07-16 16:37:13
164
原创 19.yield的表达式+三元表达式+生成式+函数递归
1.yield的表达式:x=yield 值1.yield的表达式形式def dog(name): print('道哥%s准备吃东西啦。'%name) while True: #如果有send操作,x拿到的是yield从send接收到的值 x=yield None print('道哥%s吃了%s。' % (name,x))g=dog('bob')g.send(None)#等同于next(g)g.send('一根骨头')g.se
2021-07-16 04:03:00
555
原创 18.迭代器
1.迭代器1.什么是迭代器?迭代器是指迭代取值的工具,迭代是指一个重复的过程,每次重复都是基于上一次的结果而继续的,单纯的重复不是迭代2.为何要有迭代器?迭代器是用来迭代取值的工具,而涉及到把多个值循环取出来的类有:列表、字符串、字典、元组、集合、打开文件l=['a','b','c']i=0while i<len(l): print(l[i]) i+=1# a# b# c上述迭代取值方式,只适用于有索引的数据类型:列表、元组、字符串为了解
2021-07-16 01:41:11
69
原创 17.装饰器
1.装饰器1.什么是装饰器?装饰器是指定义一个函数,该函数用来为其他函数添加额外功能2.为何要用装饰器?开放封闭原则:开放:指的是对拓展功能是开放的封闭:指的是对修改源代码是封闭的(扩展功能的同时,对旧代码不做修改)装饰器就是在不修改被装饰对象(函数、类等)源代码以及调用方式的前提下,为被装饰对象添加新功能3.如何用装饰器?需求:在不修改index函数源代码以及调用方式的前提下,为其添加统计运行时间的功能import timedef index(x, y):
2021-07-15 22:26:00
70
原创 16.函数对象+函数嵌套+闭包函数
1.函数对象(可以把函数当成变量去用)#func=内存地址def func(): print('from func')1.可以赋值f=funcprint(f,func)#<function func at 0x0000000002211A60> <function func at 0x0000000002211A60>f()# from func2.可以当做函数的参数传入def func(): print('from func')
2021-07-14 19:29:53
96
原创 15.命名空间与作用域
1.命名空间命名空间 namespace又称名称空间 :存放名字的地方,是对栈区的划分有了命名空间,就可以在栈区中存放相同的名字,命名空间分三种:1.内置命名空间:存放的名字:python解释器内置的名字:如print、int、……存活周期:python解释器启动则产生,python解释器关闭则销毁2.局部命名空间:存放的名字:只要不是函数内定义的,也不是内置的,都是全局命名空间import osx=10if 10>3: y=2def fun
2021-07-14 16:52:14
156
原创 13-14.函数的基本使用+函数参数的使用
1.函数介绍1.函数相当于具备某一功能的工具,遵循先定义,后调用的原则2.增加代码组织结构,增加可读性,减少代码冗余,增加可维护性可扩展性3.三种定义方式、三种调用方式,三种返回值形式2.定义函数语法:def 函数名(参数1,参数2,……): #文档描述 函数体 return 值定义函数发生的事情1.申请内存空间保存函数体代码2.将上述内存地址绑定给函数名3.定义函数不会执行函数体代码,但会检测函数体语法调用函数发生的事情1.通过函数名找到函数的内存
2021-07-13 21:49:35
148
原创 12.文件操作(下)
1.b模式控制文件读写内容的模式t模式:1.读写都是字符串(Unicode)为单位2.只能针对文本文件3.必须指定字符编码 即必须指定encoding='utf-8'b 模式:binary模式 通用所有文件1.读写都是以bytes为单位2.可以针对所有文件3.一定不能指定字符编码 即不能指定encoding='utf-8'放一张图片tubiao.png到当前目录下,以b模式下,对图片文件进行操作with open(r'tubiao.png',mode='rb') as f
2021-07-13 17:23:38
109
原创 11.文件操作(上)
1.文件与文件模式介绍1.什么是文件?文件是操作系统提供给用户/应用程序操作硬盘的一种虚拟概念/接口用户/应用程序 open()操作系统(文件)计算机硬件(硬盘)2.为何要用文件用户/应用程序可以通过文件,将数据永久保存在硬盘中操作文件即操作硬盘用户/应用程序直接操作的的是文件,对文件进行的所有操作,都是在向操作系统发送系统调用,然后再由操作系统转成具体的硬盘操作3.如何用文件:open()控制文件读写内容的模式:t和b强调:t和b不能单独使用,必须配合r/w/
2021-07-12 23:01:36
91
原创 10.集合类型+字节编码(了解)
1.集合类型1.作用:1.1关系运算2.定义:s={1,2}#s=set({1,2})在{}内用逗号分隔开多个元素,多个元素满足以下三个条件:1.集合内元素必须是不可变类型s={1,[1,2]}#直接报错:TypeError: unhashable type: 'list'2.集合内元素是无序的s={1,'a','b','c',2,'d'}print(s)#{'a', 1, 2, 'c', 'd', 'b'}每次运行,打印的元素顺序都不同,是随机的3.集合内
2021-07-12 18:32:58
132
原创 9.列表类型+初识队列与堆栈+元组类型+字典类型
1.列表类型1.作用:按位置存放多个值2.定义:l=[1,21,'a']#l=list([1,21,'a'])print(type(l))#<class 'list'>3.类型转换:但凡能被for循环遍历的类型都可以当做参数用list()转换成列表res=list('hello')print(res)#['h', 'e', 'l', 'l', 'o']dic={'k1':'a','k2':'b','k3':'c'}print(list(dic))#['k1',
2021-07-12 05:09:16
116
原创 8.流程控制之for循环+print补充+数字类型+字符串类型
1.流程控制之for循环1.for循环:python提供的第二种循环方式,理论上for循环能做到的while都能做但for循环在循环取值(遍历取值)上比while循环更简洁语法:for 变量名 in 可迭代对象: 代码块可迭代对象可以是:列表、字典、字符串、元组、集合2.for和while的异同 相同之处:都是循环,for能做的事儿,while也都能做不同之处:while称之为条件循环,循环次数取决于条件何时为假;for循环称之为迭代循环,循环次数取决于in
2021-07-11 23:29:18
561
原创 7.深浅copy+流程控制之while循环
1.深浅拷贝copy1.赋值不是copylist1=['a','b',[1,2]]list2=list1list1[0]='c'list1[2][0]=3print(list1)print(list2)list2[0]='d'print(list1)print(id(list1),id(list2))#32203720 32203720赋值就是指向同样的地址,二者分隔不开,本质上并没有产生一个新的列表,list1改变,list2也跟着改,list2改,list1也跟着改。
2021-07-11 01:02:49
81
原创 6.可变不可变类型+运算符(下)+流程控制之if判断
1.可变不可变类型(可哈希不可哈希)1.可变不可变类型可变类型:值改变,id不变,证明改的是原值,证明原值是可以被改变的不可改变类型:值改变,id变,证明产生了新的值,压根没有改变原值,证明原值不可被改变2.验证2.1 int是不可改变类型x = 10print(id(x)) # 1667066912x = 11print(id(x)) # 16670669442.2 float是不可改变类型y = 3.1print(id(y)) # 30282
2021-07-10 19:26:42
78
原创 5.垃圾回收机制(GC)+用户交互+运算符(上)
1.垃圾回收机制详解(简称GC)1.计数引用x = 10 # 直接引用print(id(x))l = ['a', x] # 间接引用print(id(l[1]))# 直接引用和间接引用,都会增加变量值的引用计数1.1.列表在内存中的储存方式x = 100l = ['a', 'b', x] # l=['a'的储存地址,'b'的储存地址,100的储存地址]x = 123print(x) # 123print(l[2]) # 100# 所以即使x被赋予其他的值,l[
2021-07-10 16:24:18
101
原创 4.变量与基本数据类型
写代码的思想:优秀的代码,应该是可读性高,可维护性高,能让别人看得懂的才是好代码,而不是写得越短越好。如果别人用十几行才写完的代码,只用两三行就完成了,但是逻辑让别人看不清,这种代码是垃圾中的垃圾。真正牛的代码,是你写完了代码,即使是刚入行的小白也可以轻松看清代码当中的逻辑,这才是优质的代码,再配以注释,让代码更有质量。在pycharm中,将内容切换为注释的快捷键为:ctrl+?在pycharm中,自动规范化代码格式,ctrl+alt+L1.变量1.什么是变量?变量就是可以变化的量,
2021-07-10 01:32:56
152
原创 3.python入门
1.编程语言的介绍编程语言分类:机器语言(0101计算机的母语,运行效率最高,开发效率低,跨平台性差)汇编语言(用英文标签代替二进制,运行效率高,开发效率低,跨平台性差)高级语言(编译型、解释型)编译型===》编译器===》机器语言 执行效率高,开发效率低,跨平台性差解释型===》解释器(解释一行执行一行) 执行效率低,开发效率高,跨平台性高总结1.执行效率:机器语言>汇编语言>高级语言(编译型>解释型)2.开发效率:机器语言<汇编语言<..
2021-07-09 18:54:33
100
原创 2.计算机基础知识详解
1.cpu详解人类的程序===》cpu内部的二进制指令集===》计算机其他硬件x86-64位的概念因为最早的cpu被intel发明出来代号是8086,后来开发的cpu都是在基于这种架构,所以统称这种架构的cpu为x86架构。64位表示,cpu一次可以接收的二进制数为64位。cpu具有向下兼容性,技能运行64位程序,也能运行32位程序。寄存器介绍cpu内部单元,速度比内存快,寄存器从内存获得指令集,交给cpu的运算单元。cpu工作流程简介指令从内存传入到cpu的寄存器中
2021-07-09 08:46:39
122
原创 1.计算机核心基础
一:python是一门编程语言什么是编程语言?为什么要有编程语言?人与机器交流的语言人--------编程语言-------计算机编程就是人把自己想让计算机做的事,也就是自己的思维逻辑,用编程语言表达出来。编程的目的就是让计算机按照人类的思维逻辑去工作,从而解放人力。二:计算机基础1.什么是计算机?计算机俗称“电脑”,包含了人对计算机的终极期望——能够真的像人脑一样去工作。2.为何要有计算机?为了执行人类的程序,从而把人类解放出来。大前提:计算机的所有组成都是模仿
2021-07-09 05:57:25
189
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人