- 博客(30)
- 收藏
- 关注
原创 哈希表与哈希算法(Python系列30)
列表结构他是基于数组的,但是Python列表和数组的最大区别就是python列表中的元素数据没有类型限制,这就导致列表元素数据就没有了固定的大小,如果和数组一样将数据直接放在列表中,那么将无法通过索引来计算内存地址,列表是如何处理的呢。为什么数组通过索引查询数据的时间复杂度为O(1),也就是不管数组有多大,算法的执行时间都是不变的。在讲哈希表数据结构和哈希算法之前,我想先刨析一下数组和python中的列表。因为无论数组有多大索引为何值,CPU只运算一次,所以时间复杂度为O(1)。
2024-01-11 19:23:05
643
原创 Python正则表达式(python系列29)
虽然正则表达式学一次忘一次,但是还是得学,学完忘了至少还有个影响,就算你到时候要用记不起来,问ai或者去百度的时候不会那么陌生。前言:在实际开发中,正则表达式主要用在模式匹配(检查一个字符是否符合某种格式)和处理复杂的文本数据,例如查找,替换,分割。:使用元字符(具有特殊意义的专用字符)组成的规则,提取,替换,验证指定的字符串。
2024-01-09 14:40:18
375
原创 Python文件操作(python系列28)
学习文件操作是我们写自动化脚本(文件批量化处理),web开发(处理各种类型的文件),数据分析(为数据分析提供数据源)必不可少的。绝对路径:从操作系统根目录开始,Window以盘符“C:”, "D:", OS X或Linux以斜杠"/"开始。定义:对文件存储在计算机中位置的标识,除window使用反斜杠"\"意外,其他操作系统使用斜杠"/"分隔。对象名 = open(文件路径, "操作模式", encoding="编码方式")内部编码为二进制码,无法通过文字编码解析,如压缩包,音频,视频,图片等。
2024-01-09 10:18:08
379
原创 Python函数式编程(python系列27)
上述代码当然能实现我们提到的两个需求,可当我们的功能增加,查找列表中第一个偶数,我们则有需要定义一个函数。大家要学会举一反三,我们刚才自己写了高阶函数,面对祖师爷给我们写的内置高阶函数我们也应该使用,并能模拟出能实现相同功能的高阶函数。高阶函数是早就写好的不能修改,是闭,而核心算法是当下决定实现的扩展功能,属于开,这也体现了面向对象的开闭原则。filter(函数,可迭代对象):根据条件筛选可迭代对象中的元素,返回值为新可迭代对象。max(可迭代对象,key = 函数):根据函数获取可迭代对象的最大值。
2024-01-08 17:41:48
1132
原创 Python生成器(python系列25)
通过上面生成器原理我们可以知道,生成器既是一个可迭代对象,又是一个迭代器。但是我们每次迭代生成器的时候,都是使用同一个生成器对象,当我们迭代过一次生成器对象时,生成器对象的 index指针已经指向最后一个,当我们再次遍历生成器对象时,生成器对象的__next__会抛出StopIteration来直接终止迭代。调用生成器函数将返回一个生成器对象,不执行函数体,调用迭代器对象的next()方法时才执行生成器函数, 每次执行到yield语句时返回数据,暂时离开,待下次调用next()方法时继续从离开处继续执行。
2023-12-19 19:26:42
479
原创 Python高级之异常(python系列23)
如上代码:我们使用了__get_number来捕获用户输入的信息是否为我们想得到的。前言:我们应该怎么捕获异常,捕获异常的方式有哪些,在项目中捕获异常一般怎么去使用?把向上返回的过程变成继续按流程向下走。防止程序流程紊乱,按照既定的流程执行程序。程序不再向下运行,而是向上返回。
2023-12-15 13:58:32
384
原创 Python高级之模块化(Python系列22)
当一个文件导入一个模块,并在当前文件运行时,先需要执行第一行的导入,也就是说需要将导入模块从头到尾执行完才返回当前文件继续执行。结论:当一个模块被导入时 ,该模块的模块变量__name__为该模块的模块名。2.标准库模块 下载python时自带的模块,需要导入如 random , time等。4.自己编写的模块 自己写的,需要导入使用,如上面代码中的exercise02模块。前言:为什么要使用模块化,模块化有什么好处,什么时候使用模块化,我们一起来看看吧。2.当在一个模块中测试该模块功能时可以使用。
2023-12-15 11:00:12
517
原创 Python员工信息管理系统V2(python系列21)
_delete_staff() 删除员工信息 -> 调用StaffController类delete_staff()__modify_staff() 修改员工信息 -> 调用StaffController类modify_staff()__input_staff() 录入员工信息 -> 调用StaffController类add_staff()__eq__() 重写__eq__方法,通过名字判断两个员工是否相等,为了实现list.remove()方法。__str__() 打印员工信息。
2023-12-14 16:47:52
524
原创 Python面向对象三大特征(python系列20)
在动态类型语言检测上,我们是在运行程序时才确定对象类型,因此当我们将一个对象当作参数传入一个函数中时,该对象可以时任何类型,只要能实现函数中的对象就不会抛出异常,反之不能满足函数中对象的行为则会抛出类型中没有此方法的异常。当自定义类型重写了__lt__方法,自定义类型就可以比较大小,并且放入列表中还能使用列表的方法,如sort(),因为sort的实现代码是迭代列表,取列表中元素,让元素与元素之间比较,当列表中的对象类型没有重写__lt__方法时,会抛出异常。如 self.__name = name。
2023-12-14 12:43:45
1731
原创 Python员工信息管理系统(python系列19)
前言:都已经到了python系列第十九期了,也该整合整合前面的知识点来做一个小系统了,当然这个系统完全是用python的终端来显示,也没有数据库的加入,但是牵涉到了我们前面大部分知识点,当然后续我们会持续更新到一个真正能用的系统。显示菜单、选择菜单、录入员工信息(部门编号,员工编号、员工姓名、工资),显示所有员工信息,删除员工信息(通过名字删除,如果有同名删除第一个),修改员工信息(名字不能修改,只能修改工资,部门编号,员工编号)将显示与输出的部分放入EmployeeView类中。
2023-12-12 18:53:47
943
原创 Python面向对象之MVC架构(python系列18)
其中view表示的是视图,用来人机交互,显示内容,并传达用户的指令。controller表示控制器,用来处理功能的业务逻辑。model表示模型,处理数据层的问题。是为了让我们实现一个功能的时候。
2023-12-12 18:53:13
474
原创 Python面向对象之跨类调用(Python系列17)
但是1-1代码的语义在现实生活中不合理,不是所有人一出生就有白色宝马,只是老张开车去东北,而车也不一定是老张的,可能是借的租的,这些我们先不管,那我们该如何跨类调用。马路上有两辆车,白色法拉利,黑色劳斯莱斯,开起白色法拉利就去东北了,我们也不知道老张是借的,偷的,还是自己的,老张开车去东北。在构造方法中创建一个不由参数赋值的变量,这个实例变量将为这个类的共性,像代码1-1中,每个人出生就有一辆白色宝马。像代码1-2更符合“老张开车去东北”的语境。针对于这句话,如何使用面向对象的思想去解决。
2023-12-11 11:17:55
533
1
原创 Python面向对象之类和对象(Python系列16)
则是对象本身,在类被调用的时候,self将在内存中开辟一块空间,这块空间用来存储实例变量。如上图的所示,__init__函数执行时,self就被创建,而一个对象所占的内存空间,跟。面向对象是一种思想,让我们的程序变得更加的贴切我们的生活,更加的形象,让代码的可读性和扩展性变得更高。如代码1-1所示,self.name, self.actor, self.comment。movie就是一个对象,它是Movie类型的对象,它拥有Movie类型的变量和方法。又称构造方法,在对象被构造的时候执行,而。
2023-12-11 09:32:04
408
1
原创 Python作用域(Python系列14)
函数的变量虽然保存在栈帧中,但是也仅仅只是保存变量,而变量存储的数据却不在栈帧中,所以,当在函数中改变可变数据类型中的数据时,如增加一个列表类型数据实参的元素时。因为函数中创建的count变量存在栈帧中,并不会影响到栈帧外面的变量,而栈帧将在函数执行完毕的那一刻释放空间,这也是为什么当函数执行完以后在输出count变量,不能和函数里输出一样的原因。而右边代码,使用global声明,将要在此函数中使用全局变量count,因此函数中对count变量的操作,将不在栈帧中处理,所以会影响到全局变量count。
2023-12-07 18:40:56
352
1
原创 Python函数(Python系列13)
如上图所示,在内存中,当函数changeList没被调用时,不会有栈帧,函数中的代码将存储在内存代码区。当调用函数changeList时,会创建一个栈帧,这个栈帧会用来存储函数中创建的变量,当函数执行完成时,栈帧会立即释放内存空间。函数内部操作传入的可变数据时不用reture。函数是可以重复执行的代码块,可以重复调用。用于封装一个特定的功能,表示一个功能或是一种行为。调用者需要获得函数内部的结果时。将代码的做法与用法分离,做法改变不影响用法。调用者需要将灵活操作的数据传递给定义者时。
2023-12-06 19:23:55
414
1
原创 Python字典(Python系列12)
可以看到字典的底层其实是两个列表,字典也是可变的,所以它也有预留空间,也会自动扩容,但是字典和列表的不同点是,字典是快满的时候就扩容了,而列表是满了再扩。语法非常简单,但这里又出现了一个新的概念散列,那什么是散列呢?那什么是哈希算法,什么又是哈希碰撞和开放寻址呢?特点1:无需遍历,直接计算储存位置,速度最快。这个在下一章,也就是下一个系列将会详细描述。特点2:键必须唯一且只能是不可变类型的数据。缺点:在内存中元素没有顺序且占内存较大。我们来看看字典的内存分布图吧。将键转换为对应存储位置的容器类型。
2023-12-06 16:12:06
407
1
原创 Python字符串(Python系列11)
例如:a = 'a', a = '谭' 如果不创建新的数据,原来存储字符串a的空间不能存下字符串谭,因为a字符串占一个字节,而谭字符串在GBK编码方式中占2个字节,在UTF8中占3个字节,在Python中它不管你想修改的字符串比原先的大还是小,统一创建新数据。由上图我们可以看见字符串储存在内存空间中的原理,它是将字符转换为编码值,再将编码值转换成二进制保存到内存空间中。因为变量中存储的数据内存地址等大,所以可以在原有空间中改变,大小为八个字节。GBK:英文1个字节,中文2个字节。占位符 % (变量)
2023-12-05 16:42:08
448
原创 Python 列表与元组的区别(Python系列10)
不可变数据是按需分配,当数据发生改变的时候不会在数据原在的空间中进行修改,因为那块空间是用来存储原数据的,是按照原数据的大小进行内存分配的,我们不能确定新数据的大小,所以不能确定能不能存到原来的内存空间中,所以当想改变不可变数据时,内存中是分配了一个空间大小符合数据的新空间将新数据存储。那什么是预留空间呢?那这就要提到可变数据了,列表是可变的,而元组是不可变的,那可变数据为什么可变呢?不是无限的,它总有用完的时候,但预留空间用完的时候就会自动扩容,自动扩容拷贝原始数据,替换了内存地址,开辟了更大的空间。
2023-12-05 13:31:24
382
原创 Python深拷贝与浅拷贝(Python系列09)
list_new = list_old不属于拷贝,仅仅是list_old把列表数据的地址赋值给了变量list_new,所以list_new和list_old中存储的内存地址是相同的,所以在数据发生变化的时候,它们会同时变化。前言:在python中深拷贝和浅拷贝它们的区别是什么,在什么情况下使用浅拷贝好,又在情况下不使用深拷贝可能会出现问题,想要弄明白,我们得从内存下手。可以看到列表 list_old 改变的时候,list_new也改变了,那这是为什么呢,我们来看看内存里是如何变化的吧。
2023-12-04 20:25:13
374
原创 Python有趣的小游戏(Python系列08)
一直学也不是个事,这个时候我们应该停下来,把我们前面所学的知识串起来,看看自己能实现什么样的功能,这里我想到两个有趣的程序,大家快来试试吧!
2023-12-04 11:02:41
1091
原创 Python容器类型(Python系列07)
Python的容器类型有哪些呢?列表list,元组tuple,字符串str,集合set以及字典dict,那我们来看看他们的用法和作用吧。
2023-12-02 17:59:12
390
原创 Python流程控制语句(Python系列06)
当我们希望一个程序它满足一个条件时执行a代码块,当他不满足时,则执行b代码块,这个时候我们则需要用到判断语句。这个怎么理解,首先你要知道CPU是干嘛的,CPU是用来计算的,如果第一段代码我输入的是 vip 和 200,那么第一段代码需要进行几次运算才能输出85折,答案是4次,而第二段代码只需要计算2次。,对,现在的写法一比写法二更占内存,内存中创建了一个新的变量is_vip,变量中储存了一个bool类型的数据,多占了两块内存。判断语句,循环语句,跳转语句,让我们来看看它们的用法,写法和作用吧。
2023-12-02 13:14:02
354
原创 Python基本数据类型及转换(Python系列05)
如上图所示,改变int数据类型的值时需要重新赋值,而重新赋值,改变的并不是9001内存地址指向空间里的数据42,而是在内存中重新开了一块空间,有了指向这块空间的新的内存地址9002,然后用9002覆盖变量名指向空间中储存的地址。而储存数据42的这块空间,没有变量名再“牵着”它,它将会被GC(垃圾回收器)回收,不再占用内存。任何的数据都能转换为bool类型,除了刚才提到的哪些每个数据类型中的空值外,其他的都返回True,# 这些都返回的是False,除了这些,其他的数据都返回True。
2023-11-30 20:31:40
334
原创 Python运算符(Python系列04)
没错,就是累计运算符这个计算程序它占用的内存比较小,了解python变量内存原理的就知道,上面的那个程序占用了10块内存空间,而下面的累计只占用了2块内存空间。如果不了解变量内存原理的可以看看我上一篇。上面的True和False是比较运算符的返回值,而实际代码中应该是。由上述代码可以看出,使用累计运算符的代码比算数运算符的要更简洁。请问上述代码累计运算符计算,除了简洁以外,还有什么优势呢?比较运算符用来比较两个数据,返回值是bool类型。那它和运算符的区别是什么呢。
2023-11-30 20:31:31
378
原创 Python变量(Python系列03)
如上图所示,当我们给anwser重新赋值的时候,改变的并不是9001内存地址指向空间里的数据42,而是在内存中重新开了一块空间,有了指向这块空间的新的内存地址9002,然后用9002覆盖变量名指向空间中储存的地址。如上图所示,python变量占两块内存空间,而变量名answer是1001(这是一个内存地址)的别名,1001这个地址里储存的是另外一个内存地址9001,而9001就是数据42的内存地址。前言:什么是变量,你真真正正的了解了Python变量了吗,知道它是如何操控储存在内存里的数据的吗?
2023-11-30 10:17:58
469
原创 PyCharm的常用快捷键(Python系列02)
前言:作为一个程序猿,快捷键是非常重要的,它能大大的提高你的开发效率。一个合格的程序猿在敲代码的时候,手一定会很少去碰鼠标的,因为那很大程度上降低了你的工作效率,那么在PyCharm中哪些快捷键能代替鼠标呢?总结:这是非常好用的快捷键,很多是编辑软件通用的,不仅仅是对于PyCharm,敲代码的时候脱离鼠标,从今天开始!6.光标移动所在行的左右端,和文件的上下端。7.移动光标所在行的代码(上下移动)8.选中光标所在行的代码(左右选中)2.关闭当前所在页面的程序。1.运行当前所在页的程序。
2023-11-29 22:37:26
405
2
原创 Python的优势(Python系列01)
我们要学习一门编程语言的时候,首先要了解这门语言相比于其他语言它的优势是什么,比如说我要开始学Python了,我要知道我为什么要学Python而不去学Java或者其他的编程语言,那么Python先对于其他的编程语言,它的优势是什么呢?python可以用于桌面应用程序,web,网络爬虫,数据分析,人工智能等各种应用。python具有简单的语法结构和清晰的代码风格,相对其他语言python代码更加易懂易读。python有丰富的第三方库和模块,可以方便的进行扩展开发。
2023-11-29 16:54:10
354
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人