自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(84)
  • 资源 (1)
  • 收藏
  • 关注

原创 Python 中的高并发 I/O

并发(concurrency)指计算机似乎能在同一时刻做许多件不同的事情。例如,在只配有一个 CPU 核心的计算机上面,操作系统可以迅速切换这个处理器所运行的程序,因此尽管同一时刻最多只有一个程序在运行,但这些程序能够交替地使用这个核心,从而造成一种假象,让人觉得它们好像真的在同时运行。

2024-09-14 22:15:00 1032 1

原创 Python 中考虑 concurrent.futures 实现真正的并行计算

思考,如何将代码所要执行的计算任务划分成多个独立的部分并在各自的核心上面平行地运行。Python 的全局解释器锁(global interpreter lock,GIL)导致没办法用线程来实现真正的并行​,所以先把这种方案排除掉。

2024-09-07 22:15:00 691

原创 Python 中用线程执行阻塞式 I/O,不做并行计算

尽管 Python 也支持多线程,但这些线程受 GIL(global interpreter lock,全局解释器锁) 约束,所以每次或许只能有一条线程向前推进,而无法实现多头并进。既然有这么多限制,那 Python 还支持多线程干什么?

2024-08-31 22:15:00 1581

原创 Python 利用 Lock 防止多个线程争数据

GIL实际上就是一种互斥锁(mutual-exclusion lock,mutex),用来防止 CPython 的状态在抢占式的多线程环境(preemptive multithreading)之中受到干扰,因为在这种环境下,一条线程有可能突然打断另一条线程抢占程序的控制权。

2024-08-24 22:15:00 925

原创 Python 中用 subprocess 管理子进程

由 Python 所启动的子进程可以平行地运行,这能够充分利用计算机的每一个 CPU 核心,来尽量提升程序的处理效率。虽然 Python 解释器本身有可能会局限在一个 CPU 上面,但还是很容易就能通过 Python 来驱动并协调 CPU 密集型(CPU-intensive)的任务。

2024-08-17 22:15:00 1364

原创 Python 中的一些魔法函数

本文介绍 Python 的一些魔法函数,如:init、new、call 等,说说这些函数有说明神奇的作用。

2024-08-10 22:15:00 855

原创 Python 闭包

概念:在 Python 中,闭包(Closure)是指在一个函数内部定义另一个函数,并且内部的函数可以引用外部函数的变量,即使外部函数已经执行完毕,这些变量的值也会被保存在闭包中。

2024-08-04 22:15:00 364

原创 Python 中用 sort 方法的 key 参数来表示复杂的排序逻辑

内置的列表类型提供了名叫 sort 的方法,可以根据多项指标给 list 实例中的元素排序。在默认情况下,sort 方法总是按照自然升序排列列表内的元素。

2024-08-03 22:20:33 841

原创 Python 通过带星号的 unpacking 操作来捕获多个元素

拆分(unpacking)是一种特殊的 Python 语法,只需要一行代码,就能把数据结构里面的多个值分别赋给相应的变量。

2024-07-28 22:15:00 645

原创 PyQt 信号与槽功能

基本概念:在 PyQt 中,信号(Signal)与槽(Slot)是一种用于对象之间通信的机制。信号可以由一个对象发出,而槽是用于接收信号并执行相应操作的函数。

2024-07-25 22:51:13 617

原创 Python 装饰器

Python 装饰器(decorator)是一种用于扩展或修改现有函数功能的函数。它可以在不改变被装饰函数的源代码的情况下,为函数添加额外的行为。装饰器的本质是一个函数,它接受一个函数作为参数,并返回一个新的函数。这个新函数通常会在内部调用被装饰的函数,并在调用前后添加一些额外的逻辑。

2024-07-23 22:30:00 788

原创 Python 赋值表达式

赋值表达式(assignment expression)是 Python 3.8 新引入的语法,它会用到海象操作符(walrus operator)。这种写法可以解决某些持续已久的代码重复问题。a = b 是一条普通的赋值语句,读作 a equals b,而 a := b 则是赋值表达式,读作 a walrus b。这种表达式可以在普通的赋值语句无法应用的场合实现赋值,例如可以用在条件表达式的 if 语句里面。赋值表达式的值,就是赋给海象操作符左侧那个标识符的值。

2024-07-20 22:15:00 1144

原创 Python 可变参数 *args 和 **kwargs 的用法

概念: 用于在函数定义中接收不定数量的非关键字参数(位置参数),这些参数会被收集到一个元组中。用法:在函数定义中,在参数名称前加上 *,如 。当调用函数时,可以传递任意数量的位置参数给 args,args 在函数内部将被视为一个元组(tuple)。示例:在上述示例中,my_function 函数可以接收任意数量的参数,在函数内部通过遍历 args 元组来处理传入的参数。概念: 用于在函数定义中接收不定数量的关键字参数,这些参数会被收集到一个字典中。用法:在函数定义中,在参数名称前加上 **,如 。当调用函

2024-07-17 16:55:55 480

原创 Python 四种字符串格式化方式

格式化(formatting)是指把数据填写到预先定义的文本模板里面,形成一条用户可读的消息,并把这条消息保存成字符串的过程。

2024-07-11 22:32:21 1922

原创 Python 设计模式(第2版) -- 第四部分(其他设计模式)

最后介绍下其他设计模式。复合模式,状态设计模式,反模式等。

2024-06-21 22:00:00 1163

原创 Python 设计模式(第2版) -- 第三部分(行为型模式)

再介绍下行为型设计模式。行为型模式,顾名思义,它主要关注的是对象的责任。它们用来处理对象之间的交互,以实现更大的功能。行为型模式建议:对象之间应该能够彼此交互,同时还应该是松散耦合的。观察者设计模式是最简单的行为型模式之一,所以,首先来看看观察者设计模式。

2024-06-20 22:53:11 939

原创 Python 设计模式(第2版) -- 第二部分(结构型模式)

然后介绍下结构型设计模式。下面是一些结构型设计模式的例子:- 适配器模式:将一个接口转换成客户希望的另外一个接口。它试图根据客户端的需求来匹配不同类的接口。- 桥接模式:该模式将对象的接口与其实现进行解耦,使得两者可以独立工作。- 装饰器模式:该模式允许在运行时或以动态方式为对象添加职责。我们可以通过接口给对象添加某些属性。

2024-06-19 22:24:10 724

原创 Python 设计模式(第2版) -- 第一部分(创建型模式)

Python是一种动态语言。设计模式是由 GoF(Gang of Four)首先提出的,根据他们的观点,设计模式就是解决特定问题的解决方案。首先来看看创建型设计模式有哪些。

2024-06-18 22:50:47 1172 1

原创 Electron 应用实现截图并编辑功能

Electron 应用如何实现截屏功能,有两种思路,作为一个框架是否可以通过框架实现截屏,另一种就是 javaScript 结合 html 中画布功能实现截屏。在初步思考之后,本文优先探索使用 Electron 实现截屏功能。作为一个成熟的框架,如果能够完成截屏,那自然是已经考虑了各种会出现的问题。Electron 想要截屏还是要用到 desktopCapturer API。这个 API 也是用来实现录屏。

2023-08-12 16:02:58 3296 1

原创 Electron 和 Angular 项目升级

问题分为 Angular 升级带来的问题,Electron 升级带来的问题,包括 Angular 升级引起第三方模块不兼容的问题。还有一些 css 样式可能会变化,以及一些 TypeScript 语法问题。框架升级是一件非常麻烦的事,特别是跨许多大版本升级,需要注意的事项很多,如果项目很大,升级后需要完整测试。

2023-06-20 23:47:34 1464

原创 Angular4 中 ckeditor5 插件的使用

首先,还是先安装 ckeditor5-angular 和 ckeditor5-build-decoupled-document 插件。,按步骤创建之后下载。将下载的压缩文件解压,找到 \build\ckeditor.js 文件,替换到项目\node_modules@ckeditor\ckeditor5-build-decoupled-document\build 文件夹下。此时项目中使用的 ckeditor5 插件里的功能与在线构建的功能一样。

2023-02-12 17:23:22 1224

原创 Angular 4.0.0 之后 Angular、Node.js、TypeScript 版本依赖关系

Angular 4.0.0 之后 Angular、Node.js、TypeScript 版本依赖关系

2022-12-29 23:44:41 2414

原创 基于 Python 与 mxget 的音乐下载器

基于 Python 与 mxget 的音乐下载器需求实现一个音乐下载小工具,搜索歌曲名或演唱者名找到相关联的几首歌曲,选择序号,下载歌曲。支持下载歌词、选择下载路径、选择下载平台。环境Windows 10Python 3.8mxget 1.1.2PySide6 6.2.1mxget通过命令行在线搜索你喜欢的音乐,下载并试听。这里是它的 Github 地址 Github:mxget,有详细的使用说明,我这里就不多介绍了。不过这个 repository 是它的 Go 语言实现。至于

2021-11-08 00:09:51 933

原创 Python: 生成带用户昵称的头像

Python: 生成带用户昵称的头像需求新建用户后,根据用户输入的昵称生成图片。(例:注册"钉钉"用户后,头像根据输入的名字生成)开发环境Windows 10Python 3.8Pillow 8.1.2实现蛇皮皮蛋:Python创建文字图片(居中)/多图片合并(PIL),参考这篇文章,实现了新建一个图片,并把文字渲染到图片上。代码如下:import cv2import numpy as npfrom PIL import ImageFont, ImageDraw, Image

2021-09-12 06:22:47 1775

原创 获取 WebUploader 上传文件夹时的文件夹的绝对路径

实现 WebUploader 拖拽文件夹,获取文件夹绝对路径需求项目中用到了 WebUploader 插件,用于文件上传。WebUploader 提供了文件上传,但是不支持文件夹上传。虽然可以拖拽文件夹,但是 WebUploader帮助解析成文件。要求能够拖拽文件夹,并且获取文件夹的绝对路径,而不是文件夹下的各文件路径。实现WebUploader 的 官方文档 并未说明上传文件夹的情况。虽然没有说明,可以合理推测,文件夹绝对路径应该可以获取。先实例化一个 WebUploader 控件,如下,结合

2021-06-27 22:05:09 1913 3

原创 判断字符串是否符合 Windows/Linux 目录规则

Windows / Linux 路径 check最近项目中有一个需求,需要对获取的字符串绝对路径检查是否符合路径规则,比如 Windows 中需要以盘符开始,其中不能有一些特殊字符,在修改文件夹名或文件名会提示这些特殊字符,有 9 个:\/:*?"<>|。为什么不能包括这些字符呢?这里不做探究,可以看下这篇文章:点击实现先看下代码,再结合具体代码来理解过程。def check_path(path): """ 检查 Windows path 是否符合规则 """ loca

2021-06-20 19:27:09 857

原创 Python 与 FTP 服务器 -- ftputil 模块

Python 与 FTP 服务器 – ftputil 模块,文件上传下载Cre: 2021/02/22Mod: 2021/03/17前一篇文章分析了用 Python 内置的模块 ftplib 实现上传下载等功能,本篇文章就来看看另一个高水平的 FTP 库 ———— ftputil。它的官网:ftputil。项目需求与分析在之前 ftplib 的文章已经分析过,而且已经说明在本次文章中要处理一些其他问题,不再详述。点击ftplib查看。ftputilftputil 是第三方模块,是 ftpl

2021-06-06 20:31:13 2638 3

原创 Python 与 FTP 服务器 -- ftplib 模块

Python 与 FTP 服务器 – ftplib、ftputil 模块,文件上传下载(界面可视化)Datetime: 2021/02/22项目需求:已建立 FTP 服务器,通过 ip、用户名、密码连接后,上传与下载文件,要求能上传或下载多个文件或多个文件夹。Python 与 ftp 服务器相关的有两个模块:ftplib 和 ftputil。ftplib 是 Python 内置模块,无需下载安装,直接导入即可使用,不过功能较少,像 os 中 isdir、isfile、makedirs 等方法都没有,

2021-05-30 14:51:52 2054

原创 Python: 二进制字节流数据的读取操作 -- bytes 与 bitstring

Python: 二进制字节流数据的读取操作 – bytes 与 bitstring最近项目有个需求,需要对二进制文件读取内容,操作读取到的字节流数据,主要是查找与切片获取内容。这要求有两个标志,一个开始,一个结束,获取中间的内容。Python 的 bytes 内置了一些方法,但是却不完美。在调查后,了解到 bitstring 这个第三方包,在对字节流数据的处理上,似乎更合适。bytesbytes:一种字符序列的类型。通过比较 dir(str) 与 dir(bytes) 可知,两者的属性与方法很相似,

2021-05-23 16:00:12 28649 5

原创 Maya Python 查询引用文件中的编码问题 -- 中文乱码

Maya Python 查询引用文件中的编码问题 – 中文乱码Datetime: 2020/01/27最近在做一个功能,查询 Maya 文件中引用的其他文件。Maya 官方文档提供的方法之一是用 Python 命令来查询引用的文件。后来又使用直接读取文件获取引用文件的方法。详情可以之前的两篇文章。本文主要来说说这之间遇到的一些编码问题,编码的问题一般就是中文乱码的问题。Maya Python 命令获取引用文件因为 Maya 安装目录下的 Python(mayapy.exe)版本为 Python 2.

2021-05-16 22:19:03 2181 1

原创 查询 maya 文件中的引用文件路径 -- 直接读取文件内容获取路径

查询 maya 文件中的引用文件路径 – 直接读取文件内容获取路径Datetime: 2021‎年‎1‎月‎14‎日 ‎星期四,‏‎下午 6:43:31之前查询 maya 文件中的引用文件路径,采用的是 maya Python 命令的方式。存在一些问题:Maya 客户端:目前了解到,以上方法,必须安装 Maya。版本不全匹配:Maya 版本很多,所以文件版本也不统一。以上方法要求 Maya 软件版本不低于文件版本(创建文件的 Maya 版本)。文件类型单一:由于需要打开文件获取文件的版本,以上查

2021-05-09 22:47:23 5424

原创 查询 maya 文件中引用文件的路径 -- 通过 mayapy.exe 及 maya Python 命令获取路径

Python 查询 maya 文件的引用节点及引用文件的路径环境Maya 2017 & 2018Python 3.6VS Code实现需求:给定一个 maya 文件,查询这个 maya 文件引用了哪些文件,返回引用的文件路径。首先,需要使用 maya 软件自带的 mayapy.exe 解释器来执行 maya 包的 Python 命令,如:cmds 的相关命令,maya 中的 Python 为 Python 2,但是开发环境使用的是 Python 3.6,所以需要变通一下。通过 su

2021-05-02 23:27:50 4024 11

原创 Effective Python -- 第 8 章 部署(下)

第 8 章 部署(下)第 57 条:考虑用 pdb 实现交互调试编写程序的时候,总会遇到代码中的 bug。print 函数可以帮我们追查到很多问题的来源。针对具体用例编写测试,也是一种隔离可疑代码并寻找错误根源的好办法。但是这些手段未必总是能查到问题的根源。如果要使用更为强大的调试工具,那就请试试 Python 内置的交互调试器(interactive debugger)。这种调试器能够检视程序状态、打印局部变量,并能够以步进的方式来执行程序中的每一条语句。在其他大部分编程语言中,先必须告诉调试器应

2021-04-25 20:54:56 197 1

原创 Effective Python -- 第 8 章 部署(上)

第 8 章 部署(上)第 54 条:考虑用模块级别的代码来配置不同的部署环境所谓部署环境(deployment environment)就是程序在运行的时候所用的一套配置。每个程序至少都会有一种部署环境,这就是生产环境(production environment,产品环境)。制作程序的首要目标,就是为了能在生产环境中运行它,并产生某种成效。但是,在编写和修改程序代码的过程中,却必须要在开发程序所用的那台电脑上面运行它。而这套开发环境的配置方式,可能与生产环境有很大区别。例如,可能会在 Linux 工

2021-04-18 23:36:29 174

原创 Effective Python -- 第 7 章 协作开发(下)

第 7 章 协作开发(下)第 52 条:用适当的方式打破循环依赖关系在和他人协作时,难免会写出相互依赖的模块。而有的时候,即使自己一个人开发程序,也仍然会写出相互依赖的代码。例如,GUI(图形用户界面)程序要显示一个对话框,请用户来选择文档的保存地点。程序可以在事件处理器(event handler)里,把需要显示在对话框中的数据,通过参数传递过去。而对话框那边,也需要读取一些全局状态,例如,它要根据用户的配置信息(user preferences,用户偏好)来决定如何把自身正确地渲染出来。下面定义

2021-04-11 22:11:26 259

原创 Effective Python -- 第 7 章 协作开发(上)

第 7 章 协作开发(上)第 49 条:为每个函数、类和模块编写文档字符串由于 Python 是一门动态语言,所以文档显得极其重要。Python 对文档提供了内置的支持,使得开发者可以把文档与代码块关联起来。与其他许多编程语言不同,Python 程序在运行的时候,能够直接访问源代码中的文档信息。例如,在为函数编写了 def 语句之后,可以紧接着提供 docstring,以便将一段开发文档与该函数关联起来:def palindrome(word): """Return True if the

2021-04-04 23:29:03 200

原创 Effective Python -- 第 6 章 内置模块(下)

第 6 章 内置模块(下)第 45 条:应该用 datetime 模块来处理本地时间,而不是用 time 模块-协调世界时(Coordinated Universal Time,UTC)是一种标准的时间表述方式,它与时区无关。有些计算机,用某一时刻与 UNIX 时间原点之间相差的秒数,来表示那个时刻所对应的时间,对于这些计算机来说,UTC 是一种非常好的计时方式。但是对于普通人来说,使用 UTC 来描述时间,却不太合适,因为我们通常都是根据当前所在的地点来描述时间的。我们会说“正午”( noon)或“早

2021-03-28 17:54:02 304

原创 Effective Python -- 第 6 章 内置模块(上)

第 6 章 内置模块(上)第 42 条:用 functools.wraps 定义函数修饰器Python 用特殊的语法来表示修饰器(decorator),这些修饰器可以用来修饰函数。对于受到封装的原函数来说,修饰器能够在那个函数执行之前以及执行完毕之后,分别运行一些附加代码。这使得开发者可以在修饰器里面访问并修改原函数的参数及返回值,以实现约束语义(enforce semantics)、调试程序、注册函数等目标。例如,要打印某个函数在受到调用时所接收的参数以及该函数的返回值。对于包含一系列函数调用的递归

2021-03-21 21:14:03 184

原创 Effective Python -- 第 5 章 并发与并行(下)

第 5 章 并发与并行(下)第 39 条:用 Queue 来协调各线程之间的工作如果 Python 程序同时要执行许多事务,那么开发者经常需要协调这些事务。而在各种协调方式中,较为高效的一种,则是采用函数管线。管线的工作原理,与制造业中的组装生产线(assembly line)相似。管线分为许多首尾相连的阶段(phase,环节),每个阶段都由一种具体的函数来负责。程序总是把待处理的新部件添加到管线的开端。每一种函数都可以在它所负责的那个阶段内,并发地处理位于该阶段的部件。等负责本阶段的那个函数,把某个

2021-03-14 22:38:38 279

原创 Effective Python -- 第 5 章 并发与并行(上)

第 5 章 并发与并行(上)第 36 条:用 subprocess 模块来管理子进程Python 提供了一些非常健壮的程序库,用来运行并管理子进程,这使得 Python 语言能够很好地将命令行实用程序(command-line utility)等工具黏合起来。现有的 shell 脚本一般都会越写越复杂,在这种情况下,为了使程序代码更易读懂且更易维护,很自然地就会考虑用 Python 改写。由 Python 所启动的多个子进程,是可以平行运作的,这使得我们能够在 Python 程序里充分利用电脑中的全部

2021-03-07 17:04:03 312

基于Django的Web端垃圾分类查询的源代码文件

本份文件是我的个人博客《基于Django的Web端垃圾分类查询》的具体实现代码,为方便访客获取源文件,现上传文件于此。

2020-12-05

空空如也

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

TA关注的人

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