跨语言JSON-RPC通信实现:Go与Python互操作Demo

本项目演示了如何使用JSON-RPC协议实现Go语言和Python之间的跨语言通信。项目包含两种场景的完整实现,展示了双向的RPC调用能力。 ...

2025-01-13 · 4 分钟 · 1656 字 · Niuhe

[AI]Python Fire: 告别繁琐,一键生成命令行界面

Python Fire 是一个由 Google 开发的开源库,用于从任何 Python 对象自动生成命令行界面(CLI)。它的核心优势是:简单、自动化、几乎零样板代码。 如果你厌倦了为写一个简单的脚本而不得不编写 argparse 的大量模板代码,那么 Fire 绝对是你的得力助手。 ...

2025-07-10 · 2 分钟 · 808 字 · Niuhe

MCP技术开发与实践

MCP技术概述 MCP (Model Context Protocol) 是一个用于连接AI模型与外部数据源和工具的开放标准协议。它允许AI助手安全地访问本地和远程资源,实现更强大的功能扩展。 MCP核心特性: 标准化的客户端-服务器通信协议 支持多种传输方式(STDIO、HTTP、SSE) 基于JSON-RPC的消息格式 工具调用和资源访问能力 协议架构 ┌─────────────────┐ ┌─────────────────┐ │ MCP Client │ │ MCP Server │ │ (AI模型) │◄──►│ (工具提供者) │ └─────────────────┘ └─────────────────┘ │ │ └───────── MCP ──────────┘ (JSON-RPC over Transport) 服务器实现 计算器MCP服务器 以下是一个完整的MCP服务器实现,支持三种传输方式: ...

2025-06-09 · 5 分钟 · 2075 字 · Niuhe

UV 包管理器使用指南

UV 相比 pip 的主要优势 速度更快 使用 Rust 编写,性能优化更好 并行下载依赖 更智能的依赖解析算法 更好的依赖解析 更准确的依赖树计算 更好地处理版本冲突 支持 lockfile,确保环境的可重现性 现代化特性 原生支持虚拟环境管理 与 pip 完全兼容 支持从多种源安装包(PyPI、Git、本地等) 安装方法 在 macOS 上安装 UV: brew install uv 基础使用 虚拟环境管理 # 创建虚拟环境 uv venv <env_name> # 激活虚拟环境 source <env_name>/bin/activate 包管理基础命令(pip适配) # 安装单个包 uv pip install package_name # 从 requirements.txt 安装依赖 uv pip install -r requirements.txt # 卸载包 uv pip uninstall package_name # 列出当前环境中已安装的所有包 uv pip list # 显示特定包的详细信息(版本、依赖等) uv pip show package_name # 导出当前环境的依赖到 requirements.txt uv pip freeze > requirements.txt # 以开发模式安装当前目录下的项目 # 适用于开发自己的包时,修改代码后无需重新安装 uv pip install -e . 依赖管理最佳实践 requirements.in vs requirements.txt requirements.in(源依赖文件) ...

2025-03-31 · 4 分钟 · 1577 字 · Niuhe

Python创建自己的package

...

2024-05-25 · 2 分钟 · 716 字 · Niuhe

Pytorch模型可视化

Pytorch模型可视化...

2024-04-10 · 3 分钟 · 1170 字 · Niuhe

GDB调试Python代码

Core Dump文件 凡事皆有两面性,OS在出Core的同时,虽然会终止掉当前进程,但是也会保留下第一手的现场数据,OS仿佛是一架被按下快门的相机,而照片就是产出的Core文件。里面含有当进程被终止时内存、CPU寄存器等信息,可以供后续开发人员进行调试。 Gdb可以附着在特定进程上调试,但是为了不影响运行中的进程,可以通过生成 core file 的方式来保存进程的当前信息。 ...

2020-10-16 · 2 分钟 · 946 字 · Niuhe

Python进阶下

有两种常用的方法可以使得代码并行执行,多线程和多进程 。因为Cython解释器的实现不是线程安全的,具有GIL锁,同一时刻,只有一个线程可以获得解释器的锁。因此,Python利用多核心的CPU只能通过多进程,而多线程只适用于IO密集型的程序。 多进程基础 创建并开启进程 可以使用multiprocessing.Process()来创建进程,它接受两个参数: ...

2020-10-13 · 5 分钟 · 2417 字 · Niuhe

Python进阶中

生成器Generator def countdown(num): print('Starting') while num > 0: yield num num -= 1 # this will not print 'Starting' cd = countdown(3) # this will print 'Starting' and the first value print(next(cd)) # will print the next values print(next(cd)) print(next(cd)) # this will raise a StopIteration print(next(cd)) 迭代器使用方式 # you can iterate over a generator object with a for in loop cd = countdown(3) for x in cd: print(x) # you can use it for functions that take iterables as input cd = countdown(3) sum_cd = sum(cd) print(sum_cd) cd = countdown(3) sorted_cd = sorted(cd) print(sorted_cd) 生成器表达式 # generator expression mygenerator = (i for i in range(1000) if i % 2 == 0) print(sys.getsizeof(mygenerator), "bytes") # list comprehension mylist = [i for i in range(1000) if i % 2 == 0] print(sys.getsizeof(mylist), "bytes") # 120bytes # 4272 bytes 生成器概念 类可以实现生成器作为一个可迭代对象,它需要实现__iter__方法和__next__方法,使得类对象可迭代。此外,还需要注意记录迭代次数,以及最后raise一个StopIteration异常。 ...

2020-10-12 · 8 分钟 · 3535 字 · Niuhe

正则表达式基本使用

基础 1.1 字符匹配 字符 说明 \ 转义符 \d [0-9]。表示是一位数字。 \D [^0-9]。表示除数字外的任意字符。 \w [0-9a-zA-Z_]。表示数字、大小写字母和下划线。 \W [^0-9a-za-z_]。非单词字符。 \s [\t\v\n\r\f]。表示空白符,包括空格、水平制表符、 垂直制表符、换行符、回车符、换页符。 \S [^\t\v\n\r\f]。非空白符。 . [^\n\r\u2028\u2029]。通配符,表示几乎任意字符。 换行符、回车符、行分隔符和段分隔符除外。 \uxxxx 查找以十六进制数 xxxx 规定的 Unicode 字符。 \f 匹配一个换页符 (U+000C)。 \n 匹配一个换行符 (U+000A)。 \r 匹配一个回车符 (U+000D)。 \t 匹配一个水平制表符 (U+0009)。 \v 匹配一个垂直制表符 (U+000B)。 \0 匹配 NULL(U+0000)字符, 不要在这后面跟其它小数,因为 \0 是一个 八进制转义序列。 [\b] 匹配一个退格(U+0008)。(不要和\b 混淆了。) [abc] any of a, b, or c [^abc] not a, b, or c [a-g] character between a & g 1.2 位置匹配 字符 说明 \b 是单词边界,具体就是\w 和\W 之间的位置,也包括\w 和 ^ 之间的位置, 也包括\w 和 之间的位置。 \B 是\b 的反面的意思,非单词边界。例如在字符串中所有位置中,扣掉\b, 剩下的都是\B 的。 ^abc$ 字符串开始、结束的位置 1.3 组 字符 说明 (abc) capture group,捕获组 \n backreference to group #n,分组引用,引用第 n 个捕获组匹配的内容, 其中 n 是正整数 (?:abc) non-capturing group,非捕获组 1.4 先行断言 字符 说明 a(?=b) positive lookahead,先行断言,a 只有在 b 前面才匹配 a(?!b) negative lookahead,先行否定断言,a 只有不在 b 前面才匹配 1.5 后行断言 字符 说明 (?<=b)a positive lookbehind,后行断言,a 只有在 b 后面才匹配 (?<!b)a negative lookbehind,后行否定断言,a 只有不在 b 后面才匹配 1.6 量词和分支 字符 说明 a* 0 or more a+ 1 or more a? 0 or 1 a{5} exactly five a{2,} two or more a{1,3} between one & three a+? a{2,}? match as few as possible,惰性匹配,就是尽可能少的匹配 以下都是惰性匹配: {m,n}? {m,}? ?? +? *? ...

2020-10-11 · 11 分钟 · 5265 字 · Niuhe

编程工具之Git

Git版本控制 尽管 Git 的接口有些丑陋,但是它的底层设计和思想却是非常优雅的。丑陋的接口只能靠死记硬背,而优雅的底层设计则非常容易被人理解。因此,我们将通过一种自底向上的方式像您介绍 Git。我们会从数据模型开始,最后再学习它的接口。一旦您搞懂了 Git 的数据模型,再学习其接口并理解这些接口是如何操作数据模型的就非常容易了。 ...

2020-09-27 · 8 分钟 · 3786 字 · Niuhe

Python进阶上

Python种基本类型的比较: List is a collection which is ordered and mutable. Allows duplicate members. Tuple is a collection which is ordered and immutable. Allows duplicate members. Set is a collection which is unordered and unindexed. No duplicate members. Dictionary is a collection which is unordered, mutable and indexed. No duplicate members. Strings are immutable sequences of Unicode code points. List Python中的list是一个有序容器,容纳不同类型的数据(但推荐列表内数据类型相同),同时其是可变类型的. 创建列表 list_1 = ["banana", "cherry", "apple"] print(list_1) # Or create an empty list with the list function list_2 = list() print(list_2) # Lists allow different data types list_3 = [5, True, "apple"] print(list_3) # Lists allow duplicates list_4 = [0, 0, 1, 1] print(list_4) 内置方法 修改列表的方法尽量使用内置方法,内置方法效率较高 ...

2020-09-26 · 7 分钟 · 3404 字 · Niuhe

Python 生成ankidroid单词表/语音包

Ankidroid和插件 ankidroid下载网址https://apps.ankiweb.net/ 目前还是推荐下载anki2.0旧版,2.1版插件支持的不全。 必装插件列表: Awesome TTS:301952613 Review Heatmap:1771074083 Night Mode:1496166067 词库分享 anki-deck 从网络抓取单词/例句文本 示例从轻松背单词网站抓取,网站上涵盖了从小学到GRE以及各个专业的单词和例句。内容非常丰富,希望大家多支持这个良心网站。本抓取方法仅作示例,侵删。 网站爬取需要两个参数: book_id group_id 具体爬取代码参见我的github,anki_spider 食用方法 将爬取下来的文本,保存为文本文件 编辑单词书的字段,可自定义样式进行美化 打开anki,选择文件 ——> 导入,文件类型为以tab分割的文件类型,并允许使用HTML,匹配对应字段 ...

2019-06-02 · 1 分钟 · 369 字 · Niuhe

Python3操作二维码图片

python3中如何对二维码QRcode进行编码解码 通常对于二维码,我们需要进行两种操作: 将二维码图片扫描后解析成字符串 将字符串编码生成二维码图片 这是两个逆过程,在python2中,我们可以通过zbar这个第三方库实现两个功能。可以zbar并不支持python3,而且,zbar在window平台上的安装极其繁琐,有很多坑。 ...

2019-04-27 · 3 分钟 · 1014 字 · Niuhe

Pyserial快速上手

现在很多传感器都使用串口进行数据传送,我们再window上通常使用sscom33这类调试工具,在linux下通常使用带界面的cutecom或者命令行界面的minicom进行调试。 而使用Python写几行程API序进行自定义调试,就非常有用。并且可以快速的对传感器进行测试。本文介绍python的串口读写模块Pyserial ...

2018-09-13 · 1 分钟 · 462 字 · Niuhe