Python编程
文章平均质量分 60
为简化而生
留不住的人
PHP是世界上最美的语言
展开
-
Python全局解释器锁GIL问题
⚠️GIL并不是Python的特性,它是在实现Python解析器(CPython)时所引入的一个概念,同样一段代码可以通过CPython,PyPy,Psyco等不同的Python执行环境来执行,就没有GIL的问题。Python代码的执行由Python 虚拟机(也叫解释器主循环,CPython版本)来控制,Python 在设计之初就考虑到要在解释器的主循环中,同时只有一个线程在执行,即在任意时刻,只有一个线程在解释器中运行。不好意思,同一时间执行的线程只有一个线程,它就是这个样子的。原创 2024-06-23 22:25:20 · 250 阅读 · 0 评论 -
Python 多个装饰器_执行顺序的深刻剖析
装饰器函数的执行顺序是分为(被装饰函数)定义阶段和(被装饰函数)执行阶段的,装饰器函数在被装饰函数定义好后立即执行。有时候,我们需要多个装饰器修饰一个函数。比如:需要增加日志功能、增加执行效率测试功能。【示例】增加日志和执行计时功能的装饰器。【示例】多个装饰器执行顺序。原创 2024-03-06 21:30:56 · 426 阅读 · 0 评论 -
Python 装饰器深入剖析_装饰器的写法
装饰器本质上是一个Python函数(其实就是闭包),它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。装饰器用于有以下场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等场景。v4.0版本解决,装饰器。原创 2024-03-06 21:16:02 · 411 阅读 · 0 评论 -
Python 函数式编程核心(高阶函数、闭包等)刨析
排序算法,排序也是在程序中经常用到的算法。无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小。如果是数字,我们可以直接比较如果是自定义对象呢?直接比较数学上的大小是没有意义的,因此,比较的过程必须通过函数抽象出来。通常规定,对于两个元素x和y,如果认为x < y,则返回-1,如果认为x == y,则返回0,如果认为x > y,则返回1,这样,排序算法就不用关心具体的比较过程,而是根据比较结果直接排序。【示例】sorted对list进行排序print("升序排列:",sorter1)原创 2024-03-05 23:02:22 · 968 阅读 · 0 评论 -
Python PIP安装第三方库
强大的标准库奠定了python发展的基石,丰富和不断扩展的第三方库是python壮大的保证。我们可以进入PyPI官网():可以看到发布的第三方库达到了十多万种,众多的开发者为Python贡献了自己的力量。表 常用第三方库大汇总分类库名称说明环境管理P非常简单的交互式 python 版本管理工具Pyenv简单的 Python 版本管理工具Vex可以在虚拟环境中执行命令创建独立 Python 环境的工具包管理pipPython 包和依赖关系管理工具pip-tools。原创 2024-03-04 23:30:03 · 1455 阅读 · 0 评论 -
Python 包的概念和创建包导入包
当一个项目中有很多个模块时,需要再进行组织。我们将功能类似的模块放到一起,形成了“包”。本质上,“包”就是一个必须有的文件夹。典型结构如下:包下面可以包含“模块(module)”,也可以再包含“子包(subpackage)”。就像文件夹下面可以有文件,也可以有子文件夹一样。上图中,aaa。可以看到每个包里面都有文件。原创 2024-03-04 23:18:47 · 367 阅读 · 0 评论 -
Python import加载底层原理_importlib实现动态导入
动态导入import语句本质上就是调用内置函数,我们可以通过它实现动态导入。给动态传递不同的的参数值,就能导入不同的模块【示例】使用动态导入指定的模块注意:一般不建议我们自行使用导入,其行为在python2和python3中有差异,会导致意外错误。如果需要动态导入可以使用importlib模块。原创 2024-03-04 23:15:22 · 561 阅读 · 0 评论 -
Python 模块导入_import和from_import详解和区别
模块化设计的好处之一就是“代码复用性高”。写好的模块可以被反复调用,重复使用。模块的导入就是“在本模块中使用其他模块”。原创 2024-03-04 23:09:25 · 486 阅读 · 0 评论 -
Python 模块化编程的流程_设计和实现分离的思想
API(Application Programming Interface 应用程序编程接口)是用于描述模块中提供的函数和类的功能描述和使用方式描述。模块化编程中,首先设计的就是模块的API(即要实现的功能描述),然后开始编码实现API中描述的功能。可以通过help(模块名)查看模块的API。我们可以在模块的第一行增加一个文档字符串,用于描述模块的相关功能。我们可以根据这个特点,将模块源代码文件中的测试代码进行独立的处理。我们可以根据这个特点,将模块源代码文件中的测试代码进行独立的处理。原创 2024-03-04 22:38:13 · 428 阅读 · 0 评论 -
Python 模块化编程理念_什么是模块_哲学思想
py“量变引起质变”是哲学中一个重要的理论。量变为什么会引起质变呢?本质上理解,随着数量的增加,管理方式会发生本质的变化;旧的管理方式完全不适合,必须采用新的管理方式。❤️大家可以清晰的看到这发展的流程,核心的哲学思想就是“量变引起质变”、“物以类聚”。同样的思路,在企业管理、人的管理中思路完全一致。大家可以举一反三。原创 2024-03-04 22:28:09 · 361 阅读 · 0 评论 -
python使用正则表达式案例解析
【代码】python使用正则表达式案例解析。原创 2024-02-29 19:15:30 · 500 阅读 · 0 评论 -
Python with上下文管理资源_ traceback模块的使用_异常写入日志文件_自定义异常_raise抛出异常
程序开发中,有时候我们也需要自己定义异常类。自定义异常类一般都是运行时异常,通常继承Exception或其子类即可。命名一般以ErrorException为后缀。自定义异常由raise语句主动抛出。【示例】自定义异常类和raise语句#测试自定义异常类class AgeError(Exception): #继承Exceptionreturn str(self.errorInfo)+",年龄错误!应该在1-150之间"############测试代码################原创 2024-02-28 19:49:50 · 332 阅读 · 0 评论 -
Python异常结构_机制_常见异常汇总
是最常见的异常处理结构。excepttryecepttrytryexcept【示例】遇到异常的执行顺序除数为0【示例】循环输入数字,如果不是数字则处理异常;直到输入88,则结束循环。原创 2024-02-28 19:17:01 · 1079 阅读 · 0 评论 -
Python中特殊方法和运算符重载
Python的运算符实际上是通过调用对象的特殊方法实现的。我们可以重写上面的特殊方法,即实现了“运算符的重载”。原创 2024-02-27 22:17:09 · 328 阅读 · 0 评论 -
Python 面向对象的三大特征(封装、继承、多态)解读
在子类中,如果想要获得父类的方法时,我们可以通过super()来做。super()代表父类的定义,不是父类对象。super(子类名称,self).__init__(参数列表)class A:print("A的构造方法")super(B,self).__init__() #调用父类的构造方法print("B的构造方法")#A.say(self) 调用父类的say方法super().say() #通过super()调用父类的方法b = B()b.say()say AAA。原创 2024-02-27 22:12:50 · 1398 阅读 · 0 评论 -
PythonNone对象的特殊性
NULLNoneNoneNoneNoneTypeNoneNoneType⚠️None不是False,None不是0,None不是空字符串。None和任何其他的数据类型比较永远返回False。原创 2024-02-27 21:15:51 · 483 阅读 · 0 评论 -
Python私有属性与私有方法与@property装饰器
Python对于类的成员没有严格的访问控制限制,这与其他面向对象语言有区别。⚠️【注】方法本质上也是属性!只不过是可以通过()执行而已。所以,此处讲的私有属性和公有属性,也同时讲解了私有方法和公有方法的用法。如下测试中,同时也包含了私有方法和公有方法的例子。【测试】私有属性和公有属性使用测试从打印的Person对象所有属性我们可以看出。私有属性__age在实际存储时是按照这个属性来存储的。这也就是为什么我们不能直接使用__age而可以使用的根本原因。原创 2024-02-27 21:00:10 · 377 阅读 · 0 评论 -
Python类属性_内存分析_类方法_静态方法
静态方法”和在模块中定义普通函数没有区别,只不过“静态方法”放到了“类的名字空间里面”,需要通过“类调用”。Python中允许定义与“类对象”无关的方法,称为“静态方法”。类方法是从属于“类对象”的方法。【操作】静态方法使用测试。【操作】类方法使用测试。原创 2024-02-27 20:24:07 · 431 阅读 · 0 评论 -
Python实例属性_内存分析方法调用过程
实例属性是从属于实例对象的属性,也称为“实例变量”。他的使用有如下几个要点:实例属性一般在__init__()在本类的其他实例方法中,也是通过self进行访问:self.实例属性名#创建和初始化对象,调用__init__()初始化属性#可以给已有属性赋值,也可以新加属性。原创 2024-02-26 20:52:56 · 368 阅读 · 0 评论 -
Python类的定义_类和对象的关系_对象的内存模型
类可以看做是一个模版,或者图纸,系统根据类的定义来造出对象。我们要造一个汽车,怎么样造?类就是这个图纸,规定了汽车的详细信息,然后根据图纸将汽车造出来。类:我们叫做class。对象:我们叫做objectinstance(实例)。以后我们说某个类的对象,某个类的实例。是一样的意思。我们把对象比作一个“饼干”,类就是制造这个饼干的“模具”。原创 2024-02-26 20:23:06 · 521 阅读 · 0 评论 -
面向对象和面向过程的区别_设计者思维_执行者思维
都是解决问题的思维方式,都是代码组织的方式。面向过程是一种“执行者思维",解决简单问题可以使用面向过程面向对象是一种“设计者思维”,解决复杂、需要协作的问题可以使用面向对象宏观上:通过面向对象进行整体设计微观上:执行和处理数据,仍然是面向过程。原创 2024-02-25 22:12:53 · 379 阅读 · 0 评论 -
Python操作lambda表达式和匿名函数
表达式只允许包含一个表达式,不能包含复杂语句,该表达式的计算结果就是函数的返回值。相当于函数体。运算结果是:表达式的运算结果。函数是一种简单的、在同一行中定义函数的方法。【操作】lambda表达式使用。表达式可以用来声明匿名函数。函数实际生成了一个函数对象。原创 2024-02-25 21:52:58 · 350 阅读 · 0 评论 -
Python变量的作用域_参数类型_传递过程内存分析
变量起作用的范围称为变量的作用域,不同作用域内同名变量之间互不影响。变量分为:全局变量、局部变量。原创 2024-02-25 21:29:14 · 929 阅读 · 0 评论 -
Python函数也是对象_内存分析
定义函数后,系统就创建了相应的函数对象。⚠️当然,此处仅限于原理性讲解,实际开发中没必要这么做。Python中,“一切都是对象”。int_star(3)`的效果是完全一致的。时,系统中会创建函数对象,并通过。都是指向了同一个内置函数对象。显然,我们将内置函数对象。原创 2024-02-25 19:58:14 · 377 阅读 · 0 评论 -
Python形参和实参_文档字符串_函数的注释
【操作】定义一个函数,实现两个数的比较,并返回较大的值执行结果:20 较大值30 较大值上面的printMax函数中,在定义时写的。a和b称为“形式参数”,简称“形参”。也就是说,形式参数是在定义函数时使用的。形式参数的命名要。在调用函数时,传递的参数称为“实际参数”,简称“实参”。上面代码中,10和20就是实际参数。原创 2024-02-25 11:47:10 · 393 阅读 · 0 评论 -
Python函数的基本概念_内存分析_函数分类_定义和调用
一个程序由一个一个的任务组成;函数就是代表一个任务或者一个功能(function)。函数是代码复用的通用机制def 函数名 ([参数列表]) :'''文档字符串'''函数体/若干语句'''完成三个数的加法,并返回他们的和'''print("{0}、{1}、{2}三个数的和是:{3}".format(a,b,c,sum))return sum我们使用def来定义函数,然后就是一个空格和函数名称;Python执行def时,会创建一个函数对象,并绑定到函数名变量上。参数列表。原创 2024-02-25 11:33:31 · 421 阅读 · 0 评论 -
Python推导式创建序列_列表推导式_字典推导式_集合推导式_生成器推导式
推导式是从一个或者多个迭代器快速创建序列的一种方法。它可以将循环和条件判断结合,从而避免冗长的代码。❤️推导式是典型的Python风格,会使用它,代表你已经超过Python初学者的水平。原创 2024-02-25 11:13:10 · 316 阅读 · 0 评论 -
Python控制语句和现实逻辑表达
控制语句:把语句组合成能完成一定功能的小逻辑模块。分为三类:顺序、选择和循环。学会控制语句,是真正跨入编程界的“门槛”,是成为“程序猿”的“门票”。“如果…,则…”很神奇的是,三种流程控制语句就能表示所有的事情!不信,你可以试试拆分你遇到的各种事情。实际上,任何软件和程序,小到一个练习,大到一个操作系统,本质上都是由“变量、选择语句、循环语句”组成。原创 2024-02-24 00:31:37 · 923 阅读 · 0 评论 -
Python集合_特点_创建和删除_交集并集差集运算
集合是无序可变,元素不能重复。实际上,集合底层是字典实现,集合的所有元素都是字典中的“键对象”,因此是不能重复的且唯一的。原创 2024-02-23 21:32:51 · 356 阅读 · 0 评论 -
Python字典_核心底层原理_内存分析_存储与查找键值对过程
字典在内存中开销巨大,典型的空间换时间。键查询速度很快往字典里面添加新键值对可能导致扩容,导致散列表中键的次序变化。因此,不要在遍历字典的同时进行字典的修改键必须可散列数字、字符串、元组,都是可散列的自定义对象需要支持下面三点。原创 2024-02-23 21:21:54 · 825 阅读 · 0 评论 -
Python字典_序列解包用于列表元组字典_字典_复杂表格数据存储_列表和字典综合嵌套
序列解包可以用于元组、列表、字典。序列解包可以让我们方便的对多个变量赋值。序列解包用于字典时,默认是对“键”进行操作;如果需要对键值对操作,则需要使用items();如果需要对“值”进行操作,则需要使用values();原创 2024-02-23 21:02:51 · 357 阅读 · 0 评论 -
Python字典_元素的添加_修改_删除
【代码】Python字典_元素的添加_修改_删除。原创 2024-02-23 20:34:41 · 387 阅读 · 0 评论 -
Python字典_元素的访问_键的访问_值的访问_键值对的访问
【代码】Python字典_元素的访问_键的访问_值的访问_键值对的访问。原创 2024-02-23 20:23:52 · 401 阅读 · 0 评论 -
Python字典_特点_4种创建方式_普通_dict_zip_fromkeys
字典是“键值对”的无序可变序列,字典中的每个元素都是一个“键值对”,包含:“键对象”和“值对象”。可以通过“键对象”实现快速获取、删除、更新对应的“值对象”。列表中我们通过“下标数字”找到对应的对象。字典中通过“键对象”找到对应的“值对象”。原创 2024-02-23 20:04:46 · 364 阅读 · 0 评论 -
Python元组_元素访问_计数方法_切片操作_成员资格判断_zip()_生成器推导式_总结
从形式上看,生成器推导式与列表推导式类似,只是生成器推导式使用小括号。列表推导式直接生成列表对象,生成器推导式生成的不是列表也不是元组,而是一个生成器对象。我们可以通过生成器对象,转化成列表或者元组。也可以使用生成器对象的__next__()方法进行遍历,或者直接作为迭代器对象来使用。不管什么方式使用,元素访问结束后,如果需要重新访问其中的元素,必须重新创建该生成器对象。【操作】生成器的使用测试#列表推导式: [0, 2, 4, 6, 8]#print(a)。原创 2024-02-23 19:45:00 · 473 阅读 · 0 评论 -
Python元组_特点_创建的两种方式_tuple()要点
列表属于可变序列,可以任意修改列表中的元素。元组属于不可变序列,不能修改元组中的元素。因此,元组没有增加元素、修改元素、删除元素相关的方法。因此,我们只需学元组的创建和删除,元素的访问和计数即可。原创 2024-02-23 00:17:09 · 421 阅读 · 0 评论 -
Python列表_二维列表_表格数据存储和读取
“高小五”,20,10000,“深圳”],高小一 18 30000 北京。高小二 19 20000 上海。高小一 20 10000 深圳。高小一 18 30000 北京。高小二 19 20000 上海。高小一 20 10000 深圳。9,20000,“上海”],原创 2024-02-22 23:54:22 · 392 阅读 · 0 评论 -
Python列表_遍历_排序_max_min_sum
内置函数reversed()也支持进行逆序排列,与列表对象reverse()方法不同的是,内置函数reversed()不对原列表做任何修改,只是返回一个逆序排列的迭代器对象。只是将list2也指向了列表对象,也就是说list2和list2持有地址值是相同的,列表对象本身的元素并没有复制。我们也可以通过内置函数sorted()进行排序,这个方法返回新列表,不对原列表做修改。通过上面操作,我们可以看出,生成的列表对象b和c都是完全新的列表对象。对数值型列表的所有元素进行求和操作,对非数值型列表运算则会报错。原创 2024-02-22 23:06:41 · 636 阅读 · 0 评论 -
Python列表切片slice操作
切片是Python序列及其重要的操作,适用于列表、元组、字符串等等。切片slice操作可以让我们快速提取子列表或修改。类似字符串的切片操作,对于列表的切片操作和字符串类似。切片操作时,起始偏移量和终止偏移量不在。我们发现正常输出了结果,没有报错。这个范围,也不会报错。原创 2024-02-22 22:39:13 · 384 阅读 · 0 评论 -
Python列表_元素的访问_出现次数统计_成员资格判断
我们可以通过索引直接访问元素。索引的区间在这个范围。超过这个范围则会抛出异常。原创 2024-02-22 22:32:27 · 377 阅读 · 0 评论