自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(95)
  • 收藏
  • 关注

原创 42. 数据库编程

程序运行的时候,数据都是在内存中的。当程序终止的时候,通常都需要将数据保存到磁盘上。为了便于程序保存的读取数据,并能直接通过条件查询跨快速查询指定的数据,就出现了数据库(Database)这种专门用于集中存储和查询的软件。在 Python 中提供了数据库连接对象,它提供了获取数据库游标对象和提交/回滚事务的方法,以及如何关闭数据库连接。【1】、我们可以使用 connect() 函数获取连接对象,该函数有多个参数,具体使用哪个参数,取决于使用的数据库类型。

2025-01-02 20:59:14 280

原创 41. pip的使用

pip 是一个现代的,通用的 Pythobn 包管理工具。提供了对 Python 包的查找、下载、安装的功能,便于我们对 Python 的资源包进行管理。在安装 Python 的时候,会自动下载并安装 pip。在终端中,输入pip -V可以查看 pip 的版本。如果在命令行里,运行pip -V后出现如下提示:可能是因为你在安装 Python 的过程中,没有勾选配置环境变量选项,需要我们手动配置 Python 的环境变量。右键此电脑图标,选中属性选项,在弹出的菜单中选择高级系统设置。

2025-01-01 17:45:58 564

原创 40. 虚拟环境

Python 应用经常需要使用一些包第三方包或者模块,有时需要依赖特定的包或者库的版本,所以很难有一个能适应所有 Python 应用的软件环境。甚至有的时候 Python 应用所依赖的版本是冲突的,满足了其中一个,另一个则无法运行,解决这一问题的方法是。虚拟环境是一个包含了特定 Python 解析器以及一些软件包的自包含目录,不同的应用程序可以使用不同的虚拟环境,从而解决了依赖冲突问题,而且虚拟环境中只需要安装应用相关的包或者模块,可以给部署提供便利。

2024-12-31 20:30:39 422

原创 39. 垃圾回收机制

现在的高级语言中如 Java、C# 等,都采用垃圾回收机制,而不是 C、C++ 里用户自己管理维护内存的方式。自己管理内存及其自由,可以任意申请内存,但如同一把双刃剑,为大量的内存泄露、悬空指针等 bug 留下了隐患。。

2024-12-30 18:55:27 819

原创 38. 日志

在 Python 中系统内置的日志级别有六种:DEBUG、INFO、WARNING(默认值)、ERROR 以及 CRITICAL,系统会输出到控制台或者保存到日志文件的日志信息一定是等于或者高于当前等级的信息,例如当 level=logging.WARNING 时,只会输出或者保存 WARNING、ERROR 和 CRITICAL 级别的信息,其他级别的日志信息不会显示或保存,这也是 level 这个参数控制输出的意义所在。

2024-12-29 19:48:08 972 1

原创 37. socketserver模块

SocketServer 是标准库中的一个高级模块,它的目标是简化很多样板代码,它们是创建网络客户端和服务器所必须的代码。这个模块中有为你创建的各种各样的类。

2024-12-28 21:58:57 498

原创 36. UDP网络编程

相对于 TCP 协议,UDP 协议则是面向无连接的协议。使用 UDP 协议时,不需要建立连接,只需要知道对象的 IP 地址和端口号,就可以直接发数据包。但是,数据无法保证一定到达。虽然用 UDP 传输数据不可靠,但它的优点是比 TCP 协议的速度快。对于不要求可靠到达的数据而言,就可以使用 UDP 协议。UDP 每次发送数据的时候,都需要写上接收方的 IP 和 PORT;

2024-12-27 19:33:21 926

原创 35. TCP网络编程

TCP 是流式协议,数据向水流一样粘在一起,没有任何边界区分。如果接收数据没收干净,数据会有残留,就会和下一次的结果混淆在一起,就会出现粘包问题。粘包指的是发送方发送的若干包数据到达接收方时粘成了一包,从接收缓冲区来看,后一包数据的头紧接着前一包数据的尾,出现粘包的原因是多方面的,可能是来自发送方,也可能是来自接收方。TCP 默认使用 Nagle 算法(主要作用:减少网络中报文段的数量),而 Nagle 算法主要做两件事:①只有上一个分组得到确认,才会发送下一个分组;

2024-12-26 20:21:42 1172 1

原创 34. 网络编程

计算机网络把分布在不同地理区域的计算机与专门的外部设备用通信线路互联成一个规模大、功能强的网络系统,从而使众多的计算机可以方便的互相传递信息、共享硬件、软件、数据信息等资源。网络编程直接或间接地通过网络协议与其它计算机实现数据交换,进行通信。

2024-12-25 18:05:49 874

原创 33. 生产者消费者模型

当缓冲区满的时候,生产者会进入休眠状态,当下次消费者开始消耗缓冲区的数据时,生产者才会被唤醒,开始往缓冲区中添加数据;当缓冲区空的时候,消费者也会进入休眠状态,直到生产者往缓冲区中添加数据时才会被唤醒。在多线程开发中,如果生产者生产数据的速度很快,而消费者消费数据的速度很慢,那么生产者就必须等待消费者消费完了数据才能够继续生产数据,因为生产那么多也没有地方放;,A 进程产生数据放入缓冲区,B 进程从缓冲区中取出数据进行计算,那么这里其实就是一个生产者和消费者的模式,A 相当于生产者,B 相当于消费者。

2024-12-24 19:38:57 254

原创 32. 线程、进程与协程

如果一个操作系统上同时运行了多个程序,那么称这个操作系统就是,例如:Windows、Mac、Android、IOS、Harmony 等。如果是一个程序,它可以同时执行多个事情,那么就称为。一个 CPU 默认可以执行一个程序,如果想要多个程序一起执行,理论上就需要多个 CPU 来执行。如果一个 CPU 是一个核心,理论上只能同时运行一个任务,但是事实上却可以运行很多个任务。

2024-12-23 22:52:42 1053

原创 31. 协程的使用

从 Python 3.4 开始,Python 加入了协程的概念,使用 asyncio 模块实现协程。但这个版本的协程还是以生成器对象为基础。Python 3.5 中增加了 async、await 关键字,使协程的实现更加方便。(Coroutine),又称,是一种运行运行在用户态的轻量级线程。协程可以在单线程的情况下实现并发。协程拥有自己的寄存器上下文和栈。协程在调度切换时,将寄存器下上文和栈保存到其它地方,等切换回来的时候,再恢复先前保存的寄存器上下文和栈。

2024-12-22 19:05:01 775

原创 30. 多进程编程

我们可以自定义一个类继承 Process,然后一定要实现它的 run() 方法,即定义一个 run() 方法,并且在方法中实现要执行的代码。当我们调用自己编写的类创建出来的对象的 start() 方法时,会创建新的进程,并且进程会自动调用 run() 方法开始执行。如果除了 run() 方法之外还定义了很多其它的方法,那么这些方法需要在 run() 方法中自己去第调用,进程它不会自动调用。

2024-12-21 20:21:55 740

原创 29. 多线程编程

守护线程,专门用于服务其他的线程。当所有非守护线程结束时,没有了被守护者,守护线程也就没有工作可做,当然也就没有继续执行的必要了,程序就会终止,同时会杀死所有的"守护线程",也就是说只要有任何非守护线程还在运行,程序就不会终止在一个含有线程的python程序中,当主线程的代码运行完之后,如果还有其他子线程还未执行完毕,那么主线程会等待子线程执行完毕之后,再结束;

2024-12-20 21:59:39 696

原创 28. 描述符

如果将描述符对象赋值给实例属性,就相当于这个属性指向了一个普通的对象,只不过这个对象中。

2024-12-19 23:30:01 697

原创 27. 元类

只有继承了type类的类才是元类# cls当前所在的类,*args、**kwargs调用类时所传入的参数print("__new__()方法运行了")print(cls)# __init__()接收的参数是__new__()方法返回的print("__init__()方法运行了")# MyMeta.__call__()方法会先调用Person类内的__new__()方法# MyMeta.__call__()方法内会调用Person类内的__init__()方法。

2024-12-18 21:37:44 255

原创 26. 上下文管理

一般关闭使用 xxx.close() 方法,但是这种方式在产生异常的情况下不会被自动调用,即可能出现资源没有被正确的关闭,这会导致系统资源一直占用。因此,我们需要使用更简单,但是更有效的方式,即 with 来使用。上下文管理器,简单的来说分为 2 部分,一部分是申请资源,另外一部分是释放资源,而在 with 中使用资源,with 会自动调用申请资源以及释放资源的代码。这样就无需显示地调用 close() 方法了,由系统自动调用,哪怕中间出现异常,close() 方法也会被调用。方法处理一些清除工作。

2024-12-17 19:23:23 323

原创 25. 深浅拷贝

对一个对象的所有层次的拷贝(递归拷贝)称为深拷贝。我们可以使用 copy 模块中的 deepcopy() 方法实现深拷贝。

2024-12-16 21:03:50 281

原创 24. 生成器

利用迭代器,我们可以每次迭代获取数据(通过 next() 方法)时按照特定的规律进行生成。但是在实现一个迭代器时,关于当前迭代的状态需要我们自己记录,进而才能根据当前状态生成下一个数据。为了达到记录当前状态,并配合 next() 函数进行迭代使用。简而言之,迭代器时可以实现在循环的过程中生成数据时,但是稍微有些复杂。我们可以使用生成器简化这个过程,生成器就是一类特殊的迭代器。生成器只记录生成数据的方式(算法),而不是事先生成存储这些数据,这种方式就称之为。

2024-12-15 20:11:12 292

原创 23. 迭代器

只要在类中定义__iter__()方法,那么这个类创建出来的对象一定是可迭代的。通俗的说:一个具备了__iter__()方法的对象,就是一个可迭代对象。passprint("迭代器:", isinstance(people, Iterator))如果想实现自定义迭代器的话,除了在类中定义__iter__()方法还需要在类中再定义__next__()方法,即一个实现了__iter__()方法和__next__()方法的对象,就是迭代器。

2024-12-14 19:00:43 395

原创 22. 正则表达式

正则表达式(regular expression)又称,是一种文本模式(pattern)。正则表达式使用一个字符串来描述、匹配具有相同规格的字符串,通常被用来检索、替换那些符合某个模式(规则)的文本。正则表达式的核心功能就是处理文本。正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。

2024-12-13 23:23:29 962

原创 21. 反射

Python 是一种动态语言,而反射(reflection)机制被视为动态语言的关键。反射机制指的是在程序的运行过程中,对于任意一个类,都可以知道这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意方法和属性。这种动态获取程序信息以及动态调用对象的功能称为。反射,本质上就是通过字符的形式去操作对象/模块中的成员。在 Python 中,我们可以通过四个内置函数去实现反射相关的功能。

2024-12-12 19:38:11 341

原创 20. 内置模块

random 模块用来创建随机数的模块。

2024-12-11 18:46:08 282

原创 19. 包

在 Python 中,包(Package)也是一个模块。当我们模块中代码过多时,或者一个模块需要被分解为多个模块时,这时就需要使用包。普通的模块就是一个 py 文件,而包一个分级层次的目录结构,它将一组功能相近的模块组织在一个目录下。这样,既可以起到代码规范的作用,又能避免模块名重名引入的冲突。在包中,必须要有一个这个文件,这个文件中可以包含中的主要内容。使用 import 语句首次导入包时,会产生一个名称空间。然后会运行该包下的文件,将运行过程中生成的名字都会丢到这个名称空间中。

2024-12-10 22:08:05 283

原创 18. 模块

指将一个完成的程序分解为一个一个小的模块。通过将模块组合,来搭建一个完整的程序。如果不采用模块化,那么所有的代码将统一保存到一个文件中。采用模块化后,将程序分别编写到多个文件中。使用模块化后,我们可以把代码进行复用,这方面后序的开发和维护。

2024-12-09 19:58:53 775

原创 17. 面向对象的特征

所谓的封装,就是把客观事物封装成抽象概念的类,并且类可以把自己的数据和方法只向可信的类或对象开放,向没必要开放的类或对象异常信息。封装性就是隐藏内部对象的复杂性,只对外公开简单的接口。便于外部调用,从而提高系统的可扩展性、可维护性。通俗的来说,把该隐藏的隐藏起来,该暴露的暴露出来。当我们创建一个类时,我们可以通过“对象.属性”的方式,对对象的属性进行赋值。此时,赋值操作要受到属性的数据类型和存储范围的制约。除此之外,没有其它制约条件。但是,在实际问题中,我们往往需要给属性赋值加入额外的限制条件。

2024-12-08 19:27:41 862

原创 16. 面向对象编程

对象(Object)是内存中专门用来存储数据的一块区域。对象中可以存放各种数据,比如:数字、布尔值、代码等。对象由(id)、(type)和(value)三部分组成。Python 是一门面向对象的编程语言。所谓的的语言,简单理解就是语言中所有操作都是通过对象来进行的。面向对象的编程语言,关注的是对象,而不关注过程。它将功能封装进对象,强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。如果要使用某个功能,直接找到对应的对象即可。对于面向对象的语言来说,一切都是对象。以为单位,每种事物都具备自己的和。

2024-12-07 20:49:37 918

原创 15. 文件操作

(file)通常是磁盘或固态硬盘上的一段已命名的存储区。它是指一组相关数据的有序集合。这个数据集合有一个名称,叫做文件名。是文件的唯一标识,以便用户识别和引用。。所有的文件都通过流进行输入、输出操作。

2024-12-06 20:55:19 665

原创 14. 异常处理

我们也可以自定义异常类,只需要创建一个类继承 Exception 类即可。pass。

2024-12-05 20:40:40 725

原创 13. 装饰器

指的定义一个函数,该函数是用来装饰其它函数的,即为其它函数添加额外的功能。通过装饰器和闭包,可以在不修改原来函数的情况下对函数进行扩展。在开发中,我们都是通过装饰器来扩展函数的功能。在定义函数时,我们可以通过@装饰器,来使用指定的装饰器装饰当前函数。当 Python 解释器遇到 @outer 代码时,它会将 outer 当作可执行的对象来调用,即 outer(func),并且将下面的 f() 函数指向的代码块当作实参进行传递,此时变成了 outer(f)。

2024-12-04 21:40:12 876

原创 12. 闭包

在一个函数内部,我们可以在在定义一个函数,并且将内部的函数作为外部函数的返回值返回。这种高阶函数,我们也称为。“闭” 是指该函数是内嵌函数,“包” 是指该函数包含外层函数作用域的引用(不是对全局作用域)。通过闭包,我们可以创建一些只有当前函数能访问的变量,我们可以将一些私有的数据藏在闭包中。形成闭包的要件:①;②;③;正常来说,调用一个函数的时候,这个函数中的所有局部变量+形参都只会在这个函数执行过程中才会保留,只要这个函数执行完毕,那么这些局部变量+形参就会被自动释放,也就说没有了。

2024-12-02 19:36:28 320

原创 11. 名称空间

名称空间(namespace)指的是变量存储的位置,是对栈区的划分。每一个变量都需要存储到指定的名称空间中。每一个作用域都会有一个它对应的名称空间。名称空间主要分为和三种。名称空间实际上就是一个字典,是一个专门用于存储变量的字典。名称空间的加载顺序:内置名称空间 > 全局名称空间 > 局部名称空间;名称空间的销毁顺序:局部名称空间 > 全局名称空间 > 内置名称空间;名字的查找优先级:当前所在的位置向上一层一层查找;

2024-12-01 21:02:55 363

原创 10. 函数

函数也是对象,对象是内存中专门用来存储数据的一块区域。函数可以用来保存一些可执行代码的,并且可以在需要时,对这些语句进行多次调用。

2024-11-30 22:37:18 1662

原创 09. 字典

在 Python 中,(dictionary)是一系列。每个键都与一个值关联,可以使用键来访问与之关联的值。字典中的只能是的数据类型,也就是。与键相关的值可以是数字、字符串、列表 乃至字典等。事实上,可将任意的 Python 对象用作字典的值。

2024-11-29 21:37:54 1072

原创 08. 集合

在 Python 中,集合与列表类似,集合它是无序(不是按照元素的插入顺序保存)的可变序列。在集合中不能出现重复的元素。在形式上,集合的所有元素都放在一对 “{}” 中,两个相邻元素间使用 “,” 分隔。集合中的元素只能是不可变类型的数据类型,也就是可哈希类型。

2024-11-28 22:26:54 856

原创 07. 元组

元组(tuple)是 Python 中的一种序列结构,和列表类似,也是由一系列按特定顺序排列的元素组成,但它是不可变序列。因此,元组也可以称为不可变的列表。在形式上,元素的所有元素都放在一对“()”中,两个相邻元素间使用“,”分隔。在内容上,可以将整数、实数、字符串、列表、元组等任何类型的内容放在元组中,并且在同一个元素中,元素的类型可以不同。从元素和列表的定义上看,这两种结构比较相似,两者之间的主要区别为:元组是不可变序列,列表是可变序列。即元组的元素不可以单独修改,而列表可以任意修改。

2024-11-27 19:02:44 1224

原创 06. 列表

Python 中列表是由一系列按特定顺序排列的元素组成的,它是 Python 中内置的可变序列。在形式上,列表的所有元素都放在一对中括号 “[]” 中,两个相邻元素间使用逗号 “,” 分隔。在内容上,可以将整数、实数、字符串、列表、元组等任何类型的内容放入到列表中,并且同一个列表中,元素的类型可以不同,因为它们之间没有任何关系。

2024-11-26 20:25:45 1151

原创 05. 字符串

字符串用来表示一段文本信息。在 Python 中,字符串需要使用引号引起来,引号可以是单引号,也可以是双引号,但是不要混的用。相同的引号间不能嵌套使用。相同的引号之间不能嵌套使用,不同的引号之间可以嵌套使用;单引号和双引号不能跨行使用,如果要换行使用,使用 \ 连接。但是上述程序运行之后,输出结果还是在一行。如果想要换行,并且保留原有的字符串格式,我们可以使用长字符串。长字符串使用三重引号来表示。

2024-11-25 21:00:35 866

原创 04. 流程控制

流程控制就是用来控制程序运行中各语句执行顺序的语句。(或称选择结构),。

2024-11-24 17:29:47 1251

原创 03. 运算符

就是对字面量或者变量进行操作的符号;是指用运算符把字面量或者变量连接起来,符合 Python 语法的式子。不同运算符连接的表达式体现的是不同类型的表达式;Python 中的运算符主要包括和。

2024-11-23 21:50:45 993

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除