- 博客(48)
- 收藏
- 关注
原创 源码阅读:深入理解Python字典的底层实现
在Python开发中,我们几乎每天都要和字典打交道。配置信息、数据缓存、对象属性……到处都有它的身影。但你有没有好奇过:为什么字典查找一个键的速度,几乎不受字典大小的影响?无论是10个键还是1000万个键,my_dict[key]的执行时间几乎是恒定的——这就是O(1)时间复杂度的魅力。这个奇迹的背后,藏着一个叫做哈希表(Hash Table)的数据结构。Python的字典正是哈希表的一个经典实现。本文将带你一步步深入CPython的源码,从最基础的概念开始,揭秘字典的内部工作原理。
2026-04-06 09:30:00
69
原创 深入理解Python的GIL锁:从原理到实战,多线程到底是神兵还是枷锁?
任务类型单线程多线程多进程推荐方案CPU密集型(计算为主)基准基本不变或变慢部分加速多进程多进程I/O密集型(网络/磁盘)慢大幅加速中等加速多进程混合型基准部分加速可加速视比例而定核心原则:多线程适用于I/O密集型任务(在等待中让出GIL),多进程适用于CPU密集型任务(绕过GIL实现真正并行)。
2026-04-05 19:00:00
101
原创 Python中线程和进程详解:从入门到高并发实战
进程(Process)是操作系统分配资源的最小单位,是一个正在执行的程序实例。每个进程拥有独立的内存空间、文件描述符、数据栈等系统资源。打个比方:进程就像一家独立的公司,有自己的办公室、设备、员工,与其他公司互不干扰。pythonimport osprint(f"当前进程ID: {os.getpid()}")线程(Thread)是操作系统调度执行的最小单位,是进程内的一个执行流。一个进程至少包含一个线程(主线程),多个线程共享进程的资源(内存、文件等)。
2026-04-05 14:03:46
796
原创 10个提升代码效率的Python内置函数
函数核心作用效率提升点map批量映射C 级循环 + 迭代器节省内存filter条件筛选惰性求值 + C 实现过滤zip并行迭代避免索引访问,一次性打包enumerate索引+值比 range(len()) 更简洁轻量sorted通用排序Timsort + C 实现,比手写快几十倍all全真判断短路逻辑,C 循环any任一真判断短路逻辑,C 循环sum数值求和C 累加,比 Python 循环快数倍max`/`min最值提取。
2026-04-04 16:16:26
353
原创 Socket网络编程详解
Socket(套接字)是网络通信的端点,可以理解为不同进程(本地或远程)之间进行数据交换的“虚拟通道”。它屏蔽了 TCP/IP 协议栈的复杂细节,为应用层提供了一套标准的文件描述符接口 —— 打开、读写、关闭。1. TCP 适用于需要可靠传输的场景:如文件传输、HTTP、数据库连接。注意处理粘包和并发。2. UDP 适用于实时性要求高、可容忍丢包的场景:如音视频、游戏、DNS。注意应用层实现丢包恢复。3. 高并发首选 asyncio 或 epoll:避免创建大量线程带来的开销。
2026-04-03 19:58:42
370
原创 掌握生成器与迭代器,提升内存效率
迭代器是遵循迭代器协议的对象,通过__iter__()和__next__()实现按需取值。生成器是迭代器的简化形式,使用yield关键字编写生成器函数,或使用生成器表达式。惰性求值使得生成器在处理大数据、无限序列、流式数据时具有极低的内存占用。实际开发中,应优先考虑使用生成器代替大型列表,尤其适合文件处理、数据管道、分页加载等场景。
2026-04-03 10:58:48
367
原创 深入理解Python闭包与装饰器:从入门到进阶
装饰器:在不改变现有函数源代码以及函数调用方式的前提下,实现给函数增加额外的功能,使用装饰器中的内部函数充当原有函数使用。装饰器的本质就是一个闭包函数。语法:@装饰器名# 开发登录验证功能print('验证登录')# 执行原有函数fn()@checkprint('发表评论')comment()# 运行结果验证登录发表评论1. 闭包是函数嵌套、引用外部变量、返回内部函数的组合体,它可以保留外部函数的局部变量,实现在全局作用域中间接访问局部变量。
2026-04-02 21:35:47
487
原创 单例模式:Python中实现单例的几种方式
单例模式的核心要点:1. 一个类只能创建一个实例。2. 该实例必须由类自身负责创建。3. 必须向整个系统提供这个实例。在 Python 中,由于对象的创建和初始化过程相对透明,实现单例需要一些技巧。下面我们逐一探讨。方法优点缺点模块级单例最简单,天然线程安全无法控制实例化时机,无延迟加载类装饰器语法简洁,可传参类型检查破坏,多线程需加锁元类面向对象,控制力强复杂度高,需理解元类__new__ 重写最直观,Pythonic__init__ 重复执行,需额外处理。
2026-04-02 15:36:36
364
原创 Python深拷贝与浅拷贝,很多人都理解错了
浅拷贝会创建一个新的对象,但它只复制原对象中元素的引用,而不会递归复制元素本身。换句话说,新对象中的子对象仍然是原对象中子对象的引用。深拷贝会递归地复制原对象中的所有元素,创建一个完全独立的新对象。新对象与原对象没有任何共享的引用关系,修改原对象不会影响新对象,反之亦然。对于自定义对象,copy.copy() 和 copy.deepcopy() 会调用对象的 __copy__() 和 __deepcopy__() 方法(如果定义了)。
2026-04-01 20:30:00
818
原创 Python面向对象编程(OOP)高级详解
类是用来描述现实世界中同一组事物的共有特性的抽象模型,但是类也有上下级和范围之分,比如:生物 -> 动物 -> 哺乳动物 -> 灵长型动物 -> 人类 -> 黄种人从哲学上说,就是共性与个性之间的关系,比如:白马和马!所以,我们在OOP代码中,也一样要体现出类与类之间的共性与个性关系,这里就需要通过类的继承来体现。简单来说,如果一个类A使用了另一个类B的成员(属性和方法),我们就可以说A类继承了B类,同时这也体现了OOP中代码重用的特性!多态指的是一类事物有多种形态。
2026-04-01 12:03:24
550
原创 魔法方法 __init__ 与 __new__ 的区别与使用场景
_new__ 是一个静态方法(但不需要显式声明),它的第一个参数是类 cls,后面跟的是传递给构造器的参数。pythonprint("__new__ 被调用")instance = super().__new__(cls) # 调用父类的 __new____init__ 的第一个参数是实例 self,后面跟的是构造器传入的参数。它不返回任何值(或者说返回 None)。pythonprint("__init__ 被调用")
2026-03-31 20:23:29
475
原创 Python中的模块与包,搭建你的代码库
模块是一个包含 Python 代码的 .py 文件。文件名就是模块名(去掉 .py 后缀)。模块可以定义函数、类、变量,也可以包含可执行代码。python包是一种通过点式模块名组织 Python 模块的方式。一个包就是一个包含 __init__.py 文件的目录(Python 3.3+ 中 __init__.py 可以省略,但建议保留以兼容旧版本)。典型结构:单个模块: .py 文件,封装代码包*: 包含 __init__.py 的目录,组织模块。
2026-03-31 16:10:09
362
原创 Python面向对象编程(OOP)基础详解
传统的面向过程的编程思想总结起来就八个字——自顶向下,逐步细化!将要实现的功能描述为一个从开始到结束按部就班的连续的“步骤”。依次逐步完成这些步骤,如果某一个步骤的难度较大,又可以将该步骤再次细化为若干个子步骤,以此类推,一直到结尾并得到我们想要的结果。就是把要开发的系统分解为若干个步骤,每个步骤就是函数,当所有步骤全部完成以后,则这个系统就开发完毕了!举个栗子: 大家报名学习这件事情,可以分成哪些步骤?
2026-03-30 20:47:36
855
原创 函数式编程:Lambda、map、filter、reduce的高级用法
lambdamapfilterreduce是 Python 中函数式编程的四大基石。掌握它们的基本用法只是第一步,真正的高手懂得:利用lambda的灵活性(默认参数、可变参数)来编写小巧的函数对象。利用map处理多个可迭代对象,并与itertools结合实现高效流处理。利用filter和灵活筛选数据,甚至通过None快速过滤假值。利用reduce实现复杂的累积运算,并结合operator模块简化代码。将它们组合成管道,使数据处理逻辑清晰易懂。
2026-03-30 15:00:00
518
原创 Python中打包和拆包详解
将多个值组合成一个数据结构(如元组、列表、字典)的过程称为打包。最常见的打包是使用逗号分隔多个值,Python 会自动将其打包成元组。python# 打包成元组打包元组: a = 1, 2, 3,逗号分隔值自动成元组拆包序列: x, y, z = (1,2,3), 元素个数需匹配扩展拆包: a, *b = [1,2,3,4],* 收集剩余为列表函数参数打包: def f(*args, **kwargs),接收任意参数。
2026-03-29 20:30:00
543
原创 Python f-string妙用:90%的人只用了1%的功能
保留2位小数: f"{num:.2f}"宽度10,右对齐,保留2位: f"{num:>10.2f}"千位分隔符:f"{num:,.2f}"百分比: f"{ratio:.1%}"科学计数法: f"{num:.2e}"显示正号: f"{num:+.2f}"f-string 是 Python 中最优雅、最高效的字符串格式化方式。掌握它,能让你的代码更简洁,输出更美观。希望本文能帮助你在实际开发中灵活运用 f-string 处理小数格式化。
2026-03-29 15:10:42
379
原创 文件操作全攻略:读写txt、csv、json文件
在日常开发中,文件读写是最基础且高频的操作之一。无论是记录日志、存储配置,还是处理数据交换格式,都离不开对文本文件、CSV 和 JSON 文件的操作。Python 提供了简洁而强大的内置库,让文件处理变得轻而易举。本文将系统讲解这三种常见文件格式的读写方法,并结合实战示例,助你轻松掌握。
2026-03-29 09:00:00
408
原创 Python函数进阶:参数类型与返回值详解
位置参数: def f(a, b), 必须按顺序传入默认参数: def f(a, b=1)可选,定义时求值可变位置参数: def f(*args), 接收多个位置参数,打包为元组关键字参数: def f(a, *, b), * 后必须用关键字传递可变关键字参数: def f(**kwargs), 接收多个关键字参数,打包为字典。
2026-03-28 18:49:29
430
原创 还在用加号拼接字符串?这5种方法更高效
字符串拼接看似简单,但选择合适的方法能显著提升代码效率和可读性。记住:少用 `+` 循环拼接;多用 join() 处理多字符串连接;用 f-string 或 format()做格式化;大规模增量拼接考虑 StringIO。
2026-03-28 15:00:00
1018
原创 列表推导式:一行代码代替三行for循环
列表推导式是 Python 中用于创建新列表的一种简洁语法,其基本结构如下:expression:对每个元素执行的操作(可以是一个表达式或函数调用)item:从可迭代对象中取出的元素iterable:任何可迭代对象(列表、元组、字符串、range 等)if condition:可选的过滤条件,只有满足条件的元素才会参与计算简单的映射(如 [f(x) for x in lst]):列表推导式简单的过滤(如 [x for x in lst if cond]):列表推导式。
2026-03-28 08:30:00
328
原创 彻底搞懂Python中的“==”与“is”的区别,别再踩坑了!
比较值与内容: ==判断是否为 None: is、is not判断是否为 True或False:is或直接使用布尔上下文判断两个变量是否指向同一对象:is判断容器内容是否相同:==一句话总结:想比值用 == ,想比 身份(是否同一个对象)用 is。
2026-03-27 14:37:31
193
原创 Anaconda创建虚拟环境以及与pycharm关联
Anaconda安装包下载:链接: https://pan.baidu.com/s/1FQopoENKEIyJDKafIVDr7g 提取码: 9unz1、打开anaconda黑窗口2、默认是base环境注意: base环境带了很多科学库,但是暂时用不上,所以,我们建议创建虚拟环境3、创建虚拟环境命令: conda create -n 虚拟环境名字 python=版本4、切换到虚拟环境命令: conda activate 虚拟环境名字5、安装第三方库。
2026-03-27 12:17:55
279
原创 初学Python,如何优雅地处理异常?
在Python中,当程序遇到错误时,会抛出异常对象。常见的异常包括:ZeroDivisionError:除数为0、FileNotFoundError:文件不存在、ValueError:值类型错误、KeyError:字典键不存在、IndexError:列表索引超出范围。python"""余额不足异常"""passraise InsufficientBalanceError(f"余额不足,当前余额:{balance}")try:print(f"取款失败:{e}")
2026-03-26 09:05:08
225
原创 Python中使用remove()删除多个相同元素为什么删不干净?
1.remove()方法本身没有问题,它可以正确地删除第一个匹配的元素。2.问题出在“一边遍历列表一边删除”这种操作模式上,因为列表在修改后会动态变化,导致迭代器跳过某些元素。3.要删除所有相同元素,最推荐的方法是列表推导式,因为它简单、直观、不易出错。4.如果必须在原列表上修改且追求效率,可以使用倒序删除。5.无论哪种方法,都要避免在for循环中直接使用remove()来删除多个相同元素。
2026-03-25 10:14:32
496
原创 Python中函数和异常详解
函数是一段可重复使用的代码块,通过def关键字定义。基本语法如下:函数体python"""返回两个数的和"""# 调用函数print(result) # 输出 8通过继承Exception类,可以定义自己的异常类型,使代码更具可读性。python"""账户余额不足异常"""passraise InsufficientFundsError(f"余额不足,当前余额: {balance}")try:print(e)本文详细介绍了Python中函数和异常处理的核心概念。
2026-03-24 20:27:29
389
原创 Python中字符串能直接转换成元组吗?
在Python中,字符串是可迭代对象,tuple()函数会将任何可迭代对象转换为元组,遍历每个元素。python# 字符串是可迭代对象s = "123"print(char) # 1, 2, 3 逐个输出# 所以tuple(s)相当于:1.字符串能转元组吗?——能2.转换结果是什么?——字符串的每个字符成为元组的一个元素3.如何保留整个字符串?——使用 (s,)或 tuple([s])4.如何解析字符串形式的元组?——使用 ast.literal_eval(s)
2026-03-24 09:45:27
228
原创 Python五大容器详解:字符串、列表、元组、集合、字典,这一篇就够了!
容器概念:一种可以容纳多份数据的Python数据类型,容纳的每一份数据称之为1个元素 每一个元素,可以是任意类型的数据,如字符串、数字、布尔等。简单来说,容器就像是收纳盒,可以把多个数据整齐地存放在一起,方便统一管理。定义空字符串: ' ' ," " , ''' ''' , """ """ ,str()定义非空字符串: '字符内容' ,"字符内容" ,'''字符内容''' ,"""字符内容"""注意: 引号可以嵌套包裹示例python# 定义空字符串s1 = ''
2026-03-23 20:11:44
381
原创 一文读懂Python中的条件判断与循环控制
前言如果说变量是程序的血肉,数据类型是程序的骨骼,那么判断语句和循环语句就是程序的灵魂。它们赋予了程序思考和重复的能力,让代码能够根据不同情况做出不同的反应,也能让相同的操作重复执行成千上万次。本文将系统讲解Python中的判断语句和循环语句,结合实战案例,帮助你彻底掌握这些核心语法。
2026-03-22 20:00:00
472
原创 Python基础语法:从零开始,掌握编程核心
前言学习Python,就像学习一门新的语言。从最基础的输出函数开始,到理解变量的概念,再到掌握数据类型和运算符,每一步都是通往编程高手之路的基石。本文将系统梳理Python基础语法的核心知识点,结合大量代码示例,帮助你在实践中快速掌握这些必备技能。
2026-03-22 12:42:20
404
原创 MySQL基础操作清单
MySQL作为主流关系型数据库,其基础操作是入门必备核心技能。很多新手在学习时容易遗漏关键操作、混淆语法格式,导致操作报错、数据异常。
2026-03-20 09:37:55
343
原创 break,continue,return和exit的区别(详解)
continue 是循环控制关键字,仅作用于当前正在执行的 for 或 while 循环,作用是跳过本次循环中剩余的代码,直接进入下一次循环迭代,不终止整个循环。break 是循环控制关键字,作用于当前所在的 for 或 while 循环(若有嵌套循环,仅终止最内层循环),作用是强制终止当前循环,跳出循环体,执行循环外的后续代码。return 是函数专用关键字,作用是终止当前函数的执行,并将指定的值返回给函数调用者(若未指定返回值,默认返回 None)。
2026-03-19 20:51:22
477
原创 MySQL基础语法入门:注释、关键字、语句结构
注释是嵌入在SQL代码中的说明性文本,MySQL执行代码时会自动忽略注释内容,不影响数据库的任何操作。其核心作用体现在三个方面:一是对代码逻辑、功能进行说明,便于自身后续维护及团队协作时他人理解;二是调试代码时,可临时注释无需执行的代码片段,无需删除;三是规范代码格式,提升代码的专业性与可读性。关键字是MySQL系统内置的、具有特定语法含义的单词,是构成SQL语句的核心要素,用于指定MySQL需要执行的操作(如查询、创建、修改等)。
2026-03-19 09:09:29
344
原创 常见误区:MySQL安装后无法启动?3步快速排查
如果前两步都排查无误,服务还是启动失败,大概率是3306端口被其他程序占用——MySQL默认使用3306端口,若其他软件(比如其他数据库、聊天工具)占用了这个端口,MySQL就无法启动。
2026-03-18 22:00:00
316
原创 新手必看:MySQL核心概念拆解(数据库/表/字段/SQL,一看就会)
学到这里,很多新手可能还是会混淆,我们用一个完整的比喻,把4个概念串联起来,彻底搞懂它们的关系:假设我们要搭建一个“个人博客”的数据库系统:先创建一个“博客数据库”(Database)—— 相当于一个“大仓库”,专门存博客相关的所有数据;在这个数据库里,创建3个表(Table)—— 相当于3个“分类文件夹”:用户表:存博主和访客的信息;文章表:存博客文章的内容、标题、发布时间;评论表:存访客的评论内容、评论时间。
2026-03-18 10:39:04
327
原创 一文读懂MySQL与其他数据库的区别,新手该选哪一个?
对于新手来说,MySQL绝对是性价比最高的选择——免费、易用、生态完善、岗位需求多,既能快速入门练手,也能适配大部分日常开发场景。不用纠结“哪个数据库最好”,没有最好的数据库,只有最适合自己的。新手现阶段的核心目标,就是把MySQL学扎实,打好数据库基础,后续再根据需求,灵活拓展其他数据库知识。关注我,后续持续更新MySQL零基础进阶教程,从入门到精通,全程干货,新手也能轻松跟上❤️。
2026-03-17 20:55:38
482
原创 深度解析 `utf8mb4` 和 `utf8mb4_unicode_ci`:从原理到实战,避坑指南全解析
utf8mb4` 和 `utf8mb4_unicode_ci` 是MySQL中最常用的字符集和校对规则组合,掌握其底层逻辑和使用场景,能有效避免生产环境中的数据异常、查询错误等问题。核心总结如下:`utf8mb4` 是 `utf8` 的超集,支持4字节字符(含emoji),是国际化应用的首选字符集,需注意数据库版本和连接配置;`utf8mb4_unicode_ci` 不区分大小写、不区分重音,适合大多数无需精确匹配的场景(如用户名、搜索),但不适合租户ID、唯一编码等需要精确匹配的场景;
2026-03-17 19:49:48
405
原创 MYSQL之:LAG与LEAD开窗函数
在 MySQL 8.0 及以上版本中,开窗函数(Window Functions)极大增强了数据统计分析能力。LAG () 和 LEAD () 属于偏移类开窗函数,专门用于解决跨行取值的问题。简单来说:LAG ():获取当前行前面(上方 / 上一条)的数据LEAD ():获取当前行 后面(下方 / 下一条)的数据这两个函数不需要使用自连接、子查询、变量就能实现行间数据对比,是处理时间序列、流水日志、排名统计的核心函数。1.LAG 与 LEAD 核心区别。
2026-03-17 09:00:00
371
原创 MySQL 中使用 ALTER TABLE 语句实现字段的增删改与索引管理
在 MySQL 数据库的开发与维护过程中,业务需求的迭代必然会带来表结构的调整,比如新增业务字段、删除废弃字段、修改字段属性,或是为提升查询效率添加 / 删除索引。是 MySQL 表结构维护的必备技能,掌握其高频用法能高效应对业务需求迭代,同时养成先测试、再备份、最后执行的操作习惯,才能保证数据库的数据完整性和业务稳定性。在字段增删改和索引管理中的具体使用,所有语句适配 MySQL 5.7/8.0 版本,执行前需确保拥有表的。可实现普通索引、唯一索引的添加与删除,补充主键索引的常用操作。
2026-03-16 20:26:13
400
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅