- 博客(47)
- 收藏
- 关注
原创 C# record 这么用就对了
写过几回 C# 的record,再回头手写Equals,就总觉得亏得慌。DTO、配置类、值对象这类东西,本来只想做到"属性一样就算相等",却得为这件事补一整套样板代码。C# 9 的record把这件事揽了下来,编译器替你合成相等性、哈希和ToString;C# 10 又补上,让值类型也能享受同等待遇。
2026-09-11 23:39:03
243
原创 switch 表达式实战指南
<think>我们根据要求,需要根据给定内容生成≤150字的文章摘要。内容是关于C# switch表达式的介绍,对比switch语句,语法要点,弃元,关系模式,or模式,表达式作为值,when守卫等。摘要要简短。 我们提取核心:文章介绍了C# 8.0引入的switch表达式,以星期转换为例,展示了相比switch语句更简洁的语法,并讲解了其关键特性:箭头语法、弃元、关系模式、or模式、可作表达式使用,以及when守卫的适用场景和注意点。 字数控制。写一段。</think>摘要:本文以星期转换为例,对比C#
2026-09-04 00:03:28
336
原创 Python 打包,真的比 .NET 香?
<think>我们根据要求,生成≤150字的文章摘要。摘要需涵盖主要对比结果和结论。注意字数。</think>实测反驳了“Python打包最省事、体积小,.NET臃肿,AOT依赖VC++”等常识。C# AOT在体积(1.05MB)、启动(146ms)、内存(10.8MB)全面碾压Python;PyInstaller单文件因每次解包而启动极慢。GUI方面WinForms虽快但体积110MB且不支持AOT,Avalonia AOT兼顾体积与速度。Python Nuitka编译优于PyInstaller,但整体仍
2026-08-31 23:21:15
340
原创 Python描述符(下):内置机制揭秘
本文深入解析Python描述符协议的核心应用,揭示了property、静态方法、类方法以及函数变绑定方法的底层实现原理。通过纯Python代码重写这些功能,展现了描述符的统一设计模式: property本质是数据描述符,通过__get__和__set__实现属性访问控制,其setter机制实质是创建新实例替换原property。 函数自动绑定self的秘密在于函数对象是非数据描述符,其__get__方法在实例访问时返回MethodType包装对象,调用时自动插入实例作为第一参数。 方法绑定通过MethodT
2026-06-16 23:15:00
75
原创 Python描述符(中):用描述符写属性验证框架
本文介绍了Python描述符的高级应用,重点关注日志记录和属性验证两大场景。首先通过LoggedAgeAccess示例展示了描述符如何管理属性访问并自动记录日志,但指出硬编码属性名的局限性。随后引入Python 3.6的__set_name__方法,使描述符能自动获取类属性名,实现可复用的LoggedAccess描述符。 文章进一步提出用描述符构建验证器框架,通过Validator抽象基类封装公共逻辑,子类只需实现validate方法即可创建具体验证器(如String、Number)。这种声明式设计将验证逻
2026-06-15 23:15:00
363
原创 Python描述符(上):为什么 property 能拦截属性访问?
本文揭示了Python描述符协议的底层机制,通过三个核心方法__get__、__set__和__delete__实现属性访问的拦截控制。关键发现包括: 描述符分为数据描述符(定义__set__/__delete__)和非数据描述符(仅__get__),前者在属性访问时具有更高优先级。 只读属性的实现需要定义为数据描述符,通过__set__抛异常来阻止赋值,而非省略该方法。 内置装饰器如@property本质是预置的描述符实现,其行为完全遵循描述符协议规则。 方法调用自动传入self的原理在于函数对象是作为非
2026-06-14 17:27:55
339
原创 装饰器 (下): 实战篇,让你的代码更优雅
本文是Python装饰器实战指南,重点介绍了装饰器的实际应用场景和最佳实践。首先推荐使用Python内置的lru_cache和cached_property实现缓存功能,强调其线程安全和性能优势。接着展示了三个实用装饰器模板:权限验证、自动重试和参数验证,可直接用于项目开发。文章还指出了常见陷阱,如装饰器在模块导入时执行、函数签名修改问题等。最后指出装饰器体现了开闭原则和AOP思想,是Python简洁语法与强大编程理念的完美结合,能显著提升代码的可维护性和优雅性。
2026-06-06 08:00:00
179
原创 装饰器 (中): 进阶篇,解锁框架级玩法
本文介绍了Python装饰器的进阶用法,包括带参数的装饰器、多个装饰器的执行顺序、类装饰器以及用类实现装饰器。带参数的装饰器通过三层函数实现,最外层接收参数,中间层接收原函数,内层执行包装逻辑。多个装饰器从下往上装饰,从上往下执行,顺序很重要。类装饰器可以修改或增强类的功能,如自动添加__repr__方法。用类实现装饰器可以更方便地保存状态,通过__call__方法让实例可调用。这些技巧能帮助理解框架源码并编写更灵活的装饰器。
2026-06-05 22:58:09
257
原创 装饰器 (上): 入门篇,看完就能上手
本文介绍了Python装饰器的基础知识和实现原理。首先解释了函数作为第一类对象的概念,以及闭包如何保存函数状态。接着详细讲解了装饰器的本质——它通过闭包包装原函数,并返回新函数。文章还指出了常见的装饰器陷阱(如延迟绑定和函数元信息丢失),并推荐使用functools.wraps保持原函数信息。最后给出一个实用的计时装饰器示例,展示了装饰器如何优雅地为函数添加计时功能,而不需要修改原函数代码。通过理解这些核心概念,读者可以开始编写自己的装饰器。
2026-06-05 00:33:43
188
原创 Python 元类(下):进阶与实战建议
能力方法何时调用控制命名空间类体执行前创建类__new__类体执行后初始化类__init__类创建完成后拦截实例化__call__Foo()时自定义 isinstance调用时绝大多数时候你用不到它们。但当你看到 Django、SQLAlchemy 这些框架的魔法代码时,你会知道它们在做什么——它们只是在type上包了一层,拦截了类的创建过程。仅此而已。
2026-05-30 23:37:01
386
原创 Python 元类(中):拦截类的创建
这篇文章摘要(148字): 本文介绍了Python元类的核心概念和实战应用。元类是继承type的类,通过重写__new__方法拦截类创建过程。文章演示了四个实用场景:1) SimpleMeta元类打印类创建信息;2) AutoAttrMeta自动为类添加version属性;3) LowercaseMeta强制类属性名小写;4) SingletonMeta实现单例模式;5) PluginMeta自动注册插件类。关键点在于元类能修改类创建行为(__new__)或实例化过程(__call__),适用于框架开发、代
2026-05-29 00:02:08
520
原创 Python 元类(上):类也是对象
本文揭示了Python中类的本质——类本身也是对象,由type创建。通过实验展示了type()不仅能检查类型,还能动态创建类。文章剖析了class语句背后的执行机制:Python会查找元类参数,调用type.__new__创建类对象,并用type.__init__初始化。文中还对比了Python 2和3在元类语法上的差异,强调Python 3应使用metaclass=语法。理解这些底层机制有助于掌握元类概念,为理解Django等框架的类魔法奠定基础。
2026-05-28 06:30:00
337
原创 一文读懂C++结构体内存对齐
摘要: 结构体内存对齐是C/C++中优化CPU访问效率的底层机制。CPU按固定字长读取内存,未对齐的数据会导致多次访问或崩溃。编译器通过填充字节确保成员起始地址是其大小的整数倍,结构体总大小为最大对齐数的整数倍。成员顺序影响内存占用,降序排列可减少填充。跨平台时需注意对齐差异,避免隐式依赖布局。可用#pragma pack强制紧凑布局,或用alignas指定对齐。静态断言可验证关键结构体布局,确保稳定性。对齐机制以空间换时间,合理优化可提升性能与内存效率。
2026-05-27 01:15:47
382
原创 dataclass 由浅入深完全指南
Python 3.7引入的dataclasses模块通过装饰器自动生成样板代码,极大简化了数据类的创建。传统方式需要手动编写__init__、__repr__等方法,而使用@dataclass只需定义字段即可自动生成这些方法。文章介绍了基础用法,包括字段定义、默认值设置,以及使用field()函数进行精细控制。特别强调了处理可变默认值时需使用default_factory避免共享引用问题。此外,还讲解了@dataclass装饰器的参数配置,如开启排序功能等。dataclasses让Python数据类开发更简
2026-05-23 00:35:28
411
原创 Python __slots__ 入门指南
Python中的__slots__是一个优化内存和限制属性的特殊类属性。它通过为实例属性预留固定空间,取代默认的__dict__字典,从而显著减少内存占用(测试显示10万个实例可节省约10MB内存)。使用__slots__后,实例只能拥有预先声明的属性,避免了意外属性创建,并略微提升访问速度。在继承场景下需注意:子类若不定义__slots__会恢复__dict__特性;多重继承时只能有一个父类包含非空__slots__。该特性适合处理大量数据对象,但会牺牲动态灵活性。
2026-05-22 00:23:39
405
原创 别被configparser坑了!Python配置库避坑指南
这篇文章揭露了Python中configparser模块处理INI配置文件的9个常见陷阱,包括大小写转换、重复键报错、默认节干扰等问题。作者通过实际代码演示了每个问题的表现和解决方案,例如使用optionxform = str保持键名原样、正确处理布尔值转换等。文章特别强调了新老版本间的差异,并提供了兼容性建议,帮助开发者避免配置解析时的常见错误,提高代码健壮性。
2026-05-14 12:00:00
367
原创 C++ 类型别名新手入门,看完直接用
本文介绍了C++中类型别名的使用方法,主要对比了传统的typedef和现代的using两种方式。类型别名可以简化复杂类型名,提高代码可读性。typedef语法为"typedef 原类型 别名",但存在不支持模板别名和语法反人类两大缺陷。C++11引入的using语法"using 别名=原类型"更直观,完美支持模板别名,且与auto、decltype配合更方便。文章还介绍了类型别名在跨平台开发和STL迭代器中的应用,并提醒新手注意const指针、基础类型别名等常见陷阱。
2026-05-10 00:44:29
383
原创 C++枚举新手入门教程
本文介绍了C++枚举的基础知识和进阶用法。首先解释了枚举的作用是给常量命名以提高代码可读性,然后详细讲解了传统枚举的定义方式、作用域范围和使用方法。文章指出了传统枚举的两大缺陷:命名冲突和类型不安全问题。最后介绍了C++11引入的强类型枚举(enum class),它能完美解决传统枚举的问题,通过作用域限定和类型检查使代码更安全可靠。教程包含大量代码示例,适合C++新手学习枚举的基本用法和最佳实践。
2026-05-06 23:38:37
367
原创 Claude CLI免费安装和配置
本教程介绍如何在国内安装配置Claude CLI工具。首先需要安装Node.js(版本≥18.x)和Claude CLI。安装完成后,通过修改用户目录下的.claude.json配置文件绕过区域限制。然后使用阿里云百炼的兼容API服务,获取API Key并配置环境变量(包括API地址和模型参数)。最后重启终端验证是否配置成功,并提供了常见问题解决方法。该方法可免费体验Claude的基础功能。
2026-04-24 00:43:59
2426
原创 2、最简单的cmake项目
项目根目录下,创建build文件夹,后面生成的工程文件都放这里。项目根目录下,新建CMakeList.txt文件,编写如内容。本次用的是mingw, 故在build目录下执行如下指令。参数,有点麻烦,可以添加环境变量。在build目录下执行指令。, build目录下生成了。查看当前默认的生成器名字。,指定默认的生成器,如下。
2025-12-29 10:00:00
332
原创 解决IDEA中Groovy项目no Groovy library is defined...的问题
解决IDEA中新建Groovy Class出现的Cannot compile Groovy files: no Groovy library is defined for module xxx 的问题
2019-09-01 08:10:38
9272
原创 Vmware下Centos7设置静态IP
文章目录1.设置虚拟机网络2.设置宿主机网卡信息3. 修改配置文件4.测试这里在NAT模式下进行设置。1.设置虚拟机网络对应于NAT模式,虚拟机应该设置VMnet8,点击编辑->虚拟网络编辑器,如图:点击更改设置,进入下图界面,选中VMnet8,取消勾选使用本地DHCP服务将IP地址分配给虚拟机点击NAT设置,进入下图界面在子网IP网段中选一个IP作为网关IP并记住(后面有...
2019-01-31 09:20:01
3230
3
原创 MySQL8.0.13安装
文章目录1. 下载2. 配置环境变量3. 添加配置4. 初始化数据库5. 安装服务6. 登录7. 修改密码1. 下载到MySQL官网上选择合适的版本下载zip包,本次使用的版本是mysql-8.0.13-winx64。下载地址下载完之后找个合适的地方解压,解压后目录如下图所示:2. 配置环境变量将安装目录添加到环境变量Path中,如图:3. 添加配置在安装目录下新建一个名为my....
2019-01-30 19:23:53
516
原创 Git中忽略Eclipse中的特定文件
Eclipse中特定文件Eclipse为了管理我们创建的工程,往往会维护一些文件,这些文件和开发没有直接联系。这些文件对用户是隐藏的,但可以在Navigator视图(Window -> Show View ->Navigator)中看到中。主要包括了下面几种文件:.classpath文件.project文件.settings目录下的所有文件在Git中,最好不要对其进...
2018-08-29 19:32:44
1013
原创 解决VMware14打开虚拟机黑屏问题
最近把VMware升级到14.0之后,运行虚拟机之后无法显示图像(屏幕一团黑),但点击显示缩略图的时候是可以看到系统已经启动并在正常运行的。可以通过以下方法解决:以管理员身份打开命令提示符输入命令:netsh winsock reset重启电脑虚拟机和主机之间的通信,基本上是以socket的方式进行通信的(这里socket 泛指一切socket,包括本地的、网络的等等) ...
2018-03-16 23:18:04
4378
原创 Windows64位系统进入debug模式
Debug 是DOS、Windows 提供的实模式(8086方式)程序的调试工具。使用它, 可以查看CPU各种寄存器中的内容、内存的情况和在机器码级跟踪程序的运行。由于各种原因,我们可能需要使用debug 。然而,现在大多数人的电脑是64位系统,而64位系统已经不再支持命令行模式下进入debug。那64位系统用户怎样才能进入debug模式呢? 我们可以通过安装配置DOSBox和deb...
2018-03-10 11:04:32
32456
20
转载 解决JavaFX Scene Builder打不开.fxml文件的问题
前面介绍了用JavaFX Scene Builder来进行界面开发,用起来很方便。但最近在使用时发现了一个问题。 要打开fxml文件来设置控制器以及元素与控制器中的属性的对应关系时,JavaFX Scene Builder一直没有响应,只在通知栏显示一个图标,鼠标悬浮在上面时也只是显示一个小黑窗口。下面是从知乎上找来的答案,亲测可用。解决方法如下:打开JavaFX Scene Bu...
2018-03-05 15:58:55
8527
15
原创 Github Pages搭建网站
GitHub Pages是一个静态站点托管服务。 GitHub Pages设计用于直接从GitHub存储库托管您的个人,组织或项目页面。 GitHub Pages是一个静态网站托管服务,不支持服务器端代码,如PHP,Ruby或Python。 本文将介绍如何在github pages上搭建站点。
2017-12-24 20:25:56
759
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅