首页 文章 精选 留言 我的

精选列表

搜索[全栈壁垒],共10005篇文章
优秀的个人博客,低调大师

Python全栈工程师(函数嵌套、变量作用域)

ParisGabriel 感谢 大家的支持 每天坚持 一天一篇 点个订阅吧灰常感谢 当个死粉也阔以 Python人工智能从入门到精通 globals()/locals()函数: globals()返回当前全局作用域内变量的字典 locals() 返回当前局部作用域内变量的字典函数变量: 函数名是变量,它在def 语句创建时绑定函数 fa1 = fa 没有括号 绑定函数 fa1 = fa() 返回结果 函数的变量名可以序列交换算法一个函数可以作为另一个函数的实参传递:例如: def myinput(fn): L = [5, 3, 1, 9, 7] return fn(L) print(myinput(max)) print(myinput(min)) print(myinput(sum)) print(myinput(len)) 函数可以作为另一个函数的返回值:例如: def get_op(): s = input("qing shu ru cao zuo") if s == "zui da": return max elif s == "zui xiao": return min elif s == "he": return sum L = [2, 3, 4, 6,5, 6, 9, 1] print(L) f = get_op() print(f(L)) 函数的嵌套: 函数嵌套定义是指一个函数里用def语句来创建其他的函数 示例: def fn_outter(): print("fn_outter被调用") def fn_inner(): print("fn_inner被调用") fn_inner() fn_inner() print("fn_outter调用结束") fn_outter() Python的作用域: 作用域也叫名字空间,是访问变量时查找变量的范围空间 python的4个作用域: 作用域: 英文解释 缩写 局部作用域(函数内) Local(function) L 外部嵌套函数作用域 Enclosing functio loc E 函数定义所在模块(文件)作用域 Global(module) G python内建模块作用域 Builtin(python) B 包含关系(内建>模块>外部嵌套函数>函数内)变量名查找规则: 访问变量时,先查找本地变量,然后是包裹此函数外的函数内部的变量 ,之后是全局变量,最后是内建变量 L ---> E ---> G ---> B 在默认情况下,变量名赋值会创建或者改变当前作用域的变量global语句: 告诉解释执行器global语句声明一个或多个变量, 这些变量的作用域为模块级别的作用域,也称为全局变量全局声明(global) 将赋值语句操作的变量映射到模块文件内部的作用域 语法: global 变量1, 变量2, .... 说明: 1. 全局变量如果要在函数内部被赋值,则必须经过全局声明(否则会被认为是创建局部变量) 2. 全局变量在函数内部不经过声明就可以直接访问(变量已经存在并关联一个对象) 3. 不能先声明局部变量,再用global声明为全局变量,此做法不附合规则 4. global变量列表里的变量名不能出现在此作用域的形参列表里 nonlocal语句: 告诉解释执行器,nonlocal声明变量不是局部变量,也不是全局变量 它是外部嵌套函数变量 语法: nonlocal 变量名1,变量名2,... 说明: 1. nonlocal 语句只能在被嵌套的函数内部进行使用 2. 访问nonlocal变量将对外部嵌套函数作用域内的变量进行操作 3. 当有两层或两层以上函数嵌套时,访问nonlocal变量只对最近的一层变量进行操作 4. nonlocal语句的变量列表里的变量名,不能出现在此函数的参数列表中 lambda表达式(又称匿名函数)(希腊字母:入) 作用: 创建一个匿名函数对象 同def类似 但是不提供函数名 格式: lambda[ 参数1, 参数...]: 表达式 说明: 1. lambda 只是一个表达式,它用来创建一个函数对象 2. 当lambda表达式调用时,先执行冒号(:)后的表达式,并返回表达式的结果的引用关系 3. lambda 表达式创建的函数只能包含一条表达式 4. lambda 比函数简单且可以随时创建和销毁,有利于减少程序的偶合度 函数: eval () / exec() 函数 eval(source, globals=None, local=None) 把一个字符串 srouce 当成一个表达式来执行,返回表达式执行的结果 exec(source, globals=None, locals=None) 把一个字符串source 当成程序来执行 练习: 写一个函数叫hello(name),部分代码如下: count = 0 def hello(name): print('你好', name) ... 此处代码省略,需要同学们自己填写 ... 此处代码需要改变全局变量来记录此函数曾经被调用过多少次. hello('小张') hello('小李') print('hello 函数被调用', count, '次') # 2次 count = 0 def hello(name): global count count += 1 print("hello", name) hello("name") hello("xiaoli") hello("xiaoliu") hello("xiaowei") hello("xiaozhang") 1. 写一个lambda 表达式,判断这个数的2次方+1是否能被5整除,如果能被整除返回True, 否则返回False 例: fa = lambda x: ..... print(fa(2)) # True print(fa(4)) # False fa = lambda x: (x ** 2 + 1) % 5 == 0 print(fa(2)) # True print(fa(4)) # False 2. 写一个lambda表达式,求两个变量的最大值 例如: def mymax(x, y): ... mymax = lambda ... print(mymax(100, 200)) # 200 def mymax(x, y): if x > y: return x else: return y print(mymax(100, 200)) # 200 mymax = lambda x, y: x if x > y else y print(mymax(100, 200)) # 200 1. 给出一个整数n,写一个函数myfac来计算n!(n的阶乘) n! = 1 * 2 * 3 * 4 * ..... * n 如: print(myfac(5)) # 120 def myfac(n): x = 1 for i in range(1, n + 1): x = x * i return x print(myfac(5)) 2. 给出一个整数n,写一个函数计算myfn(n): 1 + 2**2 + 3**3 + .... + n**n的和 如: print(myfn(10)) # ??? def myfu(n): s = 0 for x in range(2, n + 1): s += x ** x return s print(myfu(10)) 3. 完全数: 1 + 2 + 3 = 6 (6为完全数) 1,2,3都为6的因数(因数是能被一个数x整除的整数为y,则y为x的因数) 1 x 6 = 6 2 x 3 = 6 完全数是指除自身以外的所有因数相加之和等于自身的数 求 4~5个完全数并打印出来 答案: 6 28 496 ...... def mywqs(x): s = 0 L = [] for i in range(1, x): if x % i == 0: L.append(i) for i in L: s += i if s == x: return True else: return False i = 0 wqs = 0 while wqs < 5: i += 1 if mywqs(i) == True: print(i) wqs += 1 咳咳 又到了吹NB环节 locals()、globals() 就是一个查询函数 以字典形式返回信息而已函数变量? 你就就把它看做一个全局变量 变量绑定数据 而它绑定语句块 就这么简单什么是作用域? 作用域就是变量的所属范围 超过范围就失效 在别的地方一般是3个作用域 而python有4个 内建变量 局部变量 模块全局变量 特殊那个就是两个函数嵌套之间的范围(外部嵌套) 分别都是包含关系(内建>模块>外部嵌套函数>函数内) 内建函数 不可删除或修改 其他作用域 不能与内建函数重名 否则内建函数失效 只作用于当前空间自定义函数 各作用域各不相干 同空间不可重名 global 不管在任何空间使用global都直接声明全局变量 nonlocal 只能在被嵌套函数内部使用 多层嵌套 只会跳一层 lambda 用表达式创建一个函数 和if一样

优秀的个人博客,低调大师

Python全栈工程师(数值类型、运算符)

ParisGabriel Python 入门基础 python的应用领域: 1.系统运维 2.网络编程(如:网络爬虫,搜索引擎,服务器编程) 3.科学计算 4.航空领域(如:卫星,导弹,等) 5.人工智能,机器人 6.web开发、 7.云计算 8.大数据以及数据库开发 9.教育 10.游戏,图像处理 等等。。 python的优点: 1.面向对象(java、C++、python、C#、swift) 2.开源免费 3.跨平台(windows、Linux、Unix、iOS、Android) 4.混合编程(C、C++、java、.net) 5.应用领域广泛 python的缺点: 1.执行速度没有C、C++快、较慢的java、相对而言也比较慢 2.源代码不能加密 python的组成: 1.程序是由模块组成的 2.模块是由数据、函数、支持库、类等组成的 3.函数是由语句块组成的 4.语句块是有表达式组成的 Python的核心数据类型: (整数int,浮点数float,复数complex,布尔型bool、 字符串 str 列表 list 等) 1.十进制表示方式10 200 -100 999八进制:0o177(127)0o11(9) 2.十六进制:0x11(17)0xff(255)0x1a2b3.二进制:0b1110b101 整形数 int整数是不带小数的部分数字正数负数0浮点数:float带有小数部分的数字 复数分为两部分:实部(real)虚部(image)虚部是j或J结尾的数字面值:1j(2J)1+2J3-4Jbool有两种1.true 代表条件成立2.false 代表条件不成立true的值是1false的值是0 内置对象: None 是一个表示不存在的特殊对象(空值) 用来占位或解除变量的绑定 表达式: 由数字、数字和运算符组成 通常让计算机做一些事会返回结果 算数运算运算符: 1.+ 加法 2.- 减法 3.* 乘法 4./ 除法 5.// 地板除 6.** 幂运算 7.% 取余 / 除法: 得到的是浮点数 不会丢弃小数位 // 地板除: 得到的是整数型 字节舍去所有小数(没有四舍五入) % 取余: 取整除后所剩余的余数(7%3=1) ** 幂运算: 优先级: 1.** 2.* / // % 3.+ - 4.()内的优先级最高 优先级越高越先执行 同等优先级 从左往右依次执行 混合类型自动升级: 整数加浮点数结果为浮点数 基本输入函数: print(格式:print(要打印的内容)) 多个数据类型要用“,”分开 变量: 变量就是关联一个对象的标识符并且区分字母大小写 标识符的命名: 必须以下划线或字母开头,后面跟字母、下划线、整数 不能使用Python的关键字命名 赋值运算符: “=” 语法: 变量名=表达式 变量名1=变量名2=表达式 变量名=表达式=序列 创建一个变量,此变量用来绑定数据对象 修改一个变量的绑定关系 让其绑定另一个对象 当变量不存在时创建变量 同事将对象绑定在变量上 当变量存在时改变变量的对象 一个人变量只能绑定一个对象 一个对象可以绑定多个变量 序列赋值: a,b = 100,200 Python的自动化内存管理: a=a+b 释放a a=a+b的和 变量的交换: 交换算法: >>> a=10 >>> b=20 >>> a=a+b >>> b=a-b >>> a=a-b >>> a 20 >>> b 10 第三变量: >>> a=20 >>> b=10 >>> c=a >>> a=b >>> b=c >>> a 10 >>> b 20 序列赋值: >>> a=10 >>> b=20 >>> a,b=20,10 >>> a 20 >>> b 10 >>> 删除变量: del >>> del a 删除变量的同时解除与对象的关联关系,如果能则释放对象 help(“——main——”) tarena@tedu:~$ python3 Python 3.5.2 (default, Nov 17 2016, 17:05:23) [GCC 5.4.0 20160609] on linux Type "help", "copyright", "credits" or "license" for more information. >>> a = 100 >>> help("__main__") 在交互模式下查看当前作用域的所有变量 Q退出查看 自动化内存管理和引用计数: 每个对象都会记录有几个变量绑定自身,当引用的数量为0时则此对象将被销毁 并且释放内存资源 此种自动化内存管理的方式叫引用计数 is/is not 运算符作用:判断两个对象是否是一个对象,当是同一个对象时返回true否则返回 falseis not返回值与is相反 id(obj)函数: 返回一个对象在内存中的地址(id(对象) 小整数对象值:CPython中 ,整数-5到256的数永远存在于小数池中不会释放且可重复使用符合赋值算数运算符:y += x 等同于 y = y + xy -= x 等同于 y = y - xy *= x 等同于 y = y * xy /= x 等同于 y = y / xy //= x 等同于 y = y // xy %= x 等同于 y = y % xy **= x 等同于 y = y ** x 练习:写程序打印出1.古代的秤是16两一斤 请问216两是几斤几两 print("Answer to question 1:") print(216 // 16, "axe", 216 % 16, "liang") 2.冲凌晨0:0:0计时 到现在已经过了63320秒 现在是几时几分几秒 print("Answer to question 2:") time = 63320 time // 3600 a = time % 3600 a // 60 a % 60 print(time // 3600, "小时", a // 60, "分钟", a % 60, "秒") 3.温度转换:摄氏度=5.0/9.0*(华氏度-32)请问100华氏度是多少摄氏度?如果当前温度是摄氏度温度能否算出华氏度温度是多少? print("Answer to question 3:") a = 5.0 / 9.0 * (100 - 32) print("100华氏度=", a, "摄氏度") a = 100 * 9 / 5 + 32 print("100摄氏度=", a, "华氏度")

优秀的个人博客,低调大师

⚡一键生成,全栈贯通 - Fetcher v2.3.0 发布!

🚀 Fetcher 超轻量级 • 模块化 • TypeScript 优先 • 拦截器驱动 • LLM 流式 API 支持 Fetcher v2.3.0 发布日志 🎊激动人心的时刻到了!Fetcher v2.3.0 正式发布!这个版本带来了革命性的代码生成器和一系列强大的新特性,让您的开发体验更加流畅高效! ✨ 重磅新功能 🚀全新代码生成器(Generator) 🎯 OpenAPI 3.0+ 支持:完整支持 OpenAPI 3.0+ 规范(JSON/YAML) 📦 TypeScript 代码生成:生成类型安全的 TypeScript 接口、枚举和类 🏗️ 领域驱动设计:专为Wow框架打造,支持聚合、命令、查询和领域事件 🔧 CLI 工具:易用的命令行界面,用于代码生成 🎨 装饰器式 API:生成装饰器式的客户端类,实现清晰的 API 交互 📋 全面的模型:处理复杂的模式,包括联合、交集、枚举和引用 🚀 Fetcher 生态集成:无缝集成 Fetcher 生态系统包 📊 进度日志:生成过程中的友好日志记录和进度指示器 📁 自动索引生成:自动生成 index.ts 文件,实现清晰的模块组织 🌐 远程规范支持:直接从 HTTP/HTTPS URL 加载 OpenAPI 规范 🎭 事件流:生成常规和事件流命令客户端 📖 生成器使用示例 从本地 OpenAPI 规范生成代码 fetcher-generator generate -i ./api-spec.json -o ./src/generated 从远程规范生成代码 fetcher-generator generate -i https://api.example.com/openapi.json -o ./src/generated 生成的代码结构: output/ ├── {bounded-context}/ │ ├── index.ts # 自动生成的索引文件,导出所有聚合 │ ├── boundedContext.ts # 有界上下文别名常量 │ ├── types.ts # 有界上下文的共享类型 │ └── {aggregate}/ # 聚合特定文件 │ ├── index.ts # 聚合的自动生成索引文件 │ ├── types.ts # 聚合特定类型、模型和枚举 │ ├── queryClient.ts # 查询客户端工厂,用于状态和事件查询 │ └── commandClient.ts # 命令客户端类(常规和流式) ├── index.ts # 根索引文件,导出所有有界上下文 └── tsconfig.json # 生成代码的 TypeScript 配置 🔥OpenAPI 全面增强 全新 OpenAPI 包:独立的 OpenAPI 规范支持包 扩展支持:OpenAPI 规范接口现在支持扩展功能 类型优化:SchemaType 新增 'null' 类型支持,字段可选性优化 💪装饰器(Decorator)全面升级 生命周期钩子:为 API 服务添加完整的生命周期钩子支持 参数装饰器增强:支持对象展开功能,简化参数处理 元数据管理:新增 API 元数据和请求执行器能力 类型安全:端点返回类型能力增强,提升开发体验 🎯查询系统重大改进 泛型类型支持:Condition 接口和查询接口全面支持泛型类型参数 领域事件流增强:新增状态和操作符能力,支持更复杂的数据处理 类型安全查询:事件流查询的类型安全性大幅提升 🔧核心功能优化 TRACE 方法支持:HTTP TRACE 方法现在得到完整支持 命令系统增强:新增批处理结果接口和等待信号机制 类型定义完善:新增 MessageHeaderSqlType 枚举和 WowMetadata 接口 📚 文档与工具 🎨代码质量提升 统一代码风格:ESLint 和 Prettier 自动化代码格式化 测试优化:使用 MSW 替换模拟 fetch,提升测试可靠性 ⚡ 性能与稳定性 依赖更新:所有工作区依赖更新至最新版本 Docker 支持:Wow 示例服务器更新至 v6.1.12 MongoDB 支持:MongoDB 客户端更新至 v8.0.14 🎉 破坏性变更 移除过时功能:废弃的@attributes参数装饰器已被移除 类型重命名:PathParams重命名为UrlPathParams,提升语义清晰度 架构优化:查询客户端迁移至 fetcher-decorator,架构更加统一 🚀 开始使用 这次更新为 Fetcher 生态系统带来了前所未有的开发体验!无论是全新的代码生成器,还是全面增强的类型系统,都将显著提升您的开发效率。 立即升级到 v2.3.0,体验下一代 API 开发工具的强大功能! 🌟 为什么选择 Fetcher? Fetcher 不仅仅是一个 HTTP 客户端——它是一个为现代 Web 开发设计的完整生态系统,原生支持 LLM 流式 API。基于原生 Fetch API 构建,Fetcher 提供了类似 Axios 的体验,同时保持极小的体积。 🚀 核心特性 🎯@ahoo-wang/fetcher- 基础核心 轻量级核心,驱动整个生态系统: ⚡ 超轻量级: 仅 3KiB min+gzip - 比大多数替代品更小 🧭 路径和查询参数: 内置支持路径 ({id}/:id) 和查询参数 🔗 拦截器系统: 请求、响应和错误拦截器,支持有序执行的灵活中间件模式 ⏱️ 超时控制: 可配置的请求超时和适当的错误处理 🔄 Fetch API 兼容: 完全兼容原生 Fetch API 🛡️ TypeScript 支持: 完整的 TypeScript 定义,实现类型安全开发 🧩 模块化架构: 轻量级核心和可选扩展包 📦 命名 Fetcher 支持: 自动注册和检索 fetcher 实例 ⚙️ 默认 Fetcher: 预配置的默认 fetcher 实例,快速上手 🎨@ahoo-wang/fetcher-decorator- 声明式 API 使用简洁的声明式服务定义转换您的 API 交互: 🎨 清晰的 API 定义: 使用直观的装饰器定义 HTTP 服务 🧭 自动参数绑定: 路径、查询、头部和正文参数自动绑定 ⏱️ 可配置超时: 每方法和每类的超时设置 🔗 Fetcher 集成: 与 Fetcher 的命名 fetcher 系统无缝集成 ⚡ 自动实现: 方法自动实现 HTTP 调用 📦 元数据系统: 丰富的元数据支持,用于高级自定义 📡@ahoo-wang/fetcher-eventstream- 实时流和 LLM 支持 为您的实时应用提供 Server-Sent Events 支持,专为大型语言模型流式 API 设计: 📡 事件流转换:将text/event-stream响应转换为ServerSentEvent对象的异步生成器 🔌 自动扩展:模块导入时自动扩展Response原型,添加事件流方法 📋 SSE 解析:根据规范解析服务器发送事件,包括数据、事件、ID 和重试字段 🔄 流支持:正确处理分块数据和多行事件 💬 注释处理:正确忽略注释行(以:开头的行) 🛡️ TypeScript 支持:完整的 TypeScript 类型定义 ⚡ 性能优化:高效的解析和流处理,适用于高性能应用 🤖 LLM 流准备就绪: 原生支持来自流行 LLM API(如 OpenAI GPT、Claude 等)的流式响应 LLM 集成示例 LlmClient演示了如何创建具有流支持的 LLM API 专用客户端: import { createLlmFetcher, LlmClient } from './llmClient'; // 使用您的 API 配置初始化 LLM 客户端 const llmFetcher = createLlmFetcher({ baseURL: 'https://api.openai.com/v1', apiKey: process.env.OPENAI_API_KEY || 'your-api-key', model: 'gpt-3.5-turbo', }); const llmClient = new LlmClient(); // 流式聊天完成,逐个令牌输出 async function streamChatExample() { const stream = await llmClient.streamChat({ messages: [ { role: 'system', content: 'You are a helpful assistant.' }, { role: 'user', content: 'Explain quantum computing in simple terms.' }, ], stream: true, }); for await (const event of stream) { if (event.data) { const chunk = event.data; const content = chunk.choices[0]?.delta?.content || ''; process.stdout.write(content); // 实时输出 } } } 🔧@ahoo-wang/fetcher-generator- OpenAPI 代码生成器 从 OpenAPI 规范生成 TypeScript 代码,专为 WOW 领域驱动设计框架打造: 🎯 OpenAPI 3.0+ 支持:完整支持 OpenAPI 3.0+ 规范(JSON/YAML) 📦 TypeScript 代码生成:生成类型安全的 TypeScript 接口、枚举和类 🏗️ 领域驱动设计:专为 WOW 框架打造,支持聚合、命令、查询和领域事件 🔧 CLI 工具:易用的命令行界面,用于代码生成 🎨 装饰器式 API:生成装饰器式的客户端类,实现清晰的 API 交互 📋 全面的模型:处理复杂的模式,包括联合、交集、枚举和引用 🚀 Fetcher 生态集成:无缝集成 Fetcher 生态系统包 📊 进度日志:生成过程中的友好日志记录和进度指示器 📁 自动索引生成:自动生成 index.ts 文件,实现清晰的模块组织 🌐 远程规范支持:直接从 HTTP/HTTPS URL 加载 OpenAPI 规范 🎭 事件流:生成常规和事件流命令客户端 💾@ahoo-wang/fetcher-storage- 跨环境存储 轻量级跨环境存储库,具有变更事件监听功能: 🌐 跨环境支持:为浏览器 localStorage/sessionStorage 和内存存储提供一致的 API 📦 超轻量级:仅 ~1KB gzip - 最小化占用空间 🔔 存储变更事件:通过事件驱动架构监听存储变更 🔄 自动环境检测:自动选择合适的存储实现 🛠️ 基于键的存储:高效的基于键的存储,内置缓存 🔧 自定义序列化:支持自定义序列化策略 📝 TypeScript 支持:完整的 TypeScript 定义,实现类型安全的存储操作 🧩@ahoo-wang/fetcher-wow- CQRS/DDD 框架支持 与WowCQRS/DDD 框架的一流集成: 📦 完整的 TypeScript 支持:为所有 Wow 框架实体提供完整的类型定义,包括命令、事件和查询 🚀 命令客户端:用于向 Wow 服务发送命令的高级客户端,支持同步和流式响应 🔍 强大的查询 DSL:丰富的查询条件构建器,支持全面的操作符用于复杂查询 📡 实时事件流:内置对服务器发送事件的支持,用于接收实时命令结果和数据更新 🔄 CQRS 模式实现:对命令查询责任分离架构模式的一流支持 🧱 DDD 基础构件:基本的领域驱动设计构建块,包括聚合、事件和值对象 🔍 查询客户端:专门用于查询快照和事件流数据的客户端,支持全面的查询操作: 资源计数 资源列表查询 以服务器发送事件形式流式传输资源 资源分页 单个资源检索 🔐@ahoo-wang/fetcher-cosec- 企业安全 使用集成认证保护您的应用: 🔐 自动认证: 自动 CoSec 认证头部 📱 设备管理: 使用 localStorage 持久化的设备 ID 管理 🔄 令牌刷新: 基于响应代码 (401) 的自动令牌刷新 🌈 请求跟踪: 用于跟踪的唯一请求 ID 生成 💾 令牌存储: 安全的令牌存储管理 📦 包生态系统 包 描述 版本 大小 @ahoo-wang/fetcher 核心 HTTP 客户端 具有 Axios 类似 API 的超轻量级基础 @ahoo-wang/fetcher-decorator 装饰器支持 声明式 API 服务定义 @ahoo-wang/fetcher-eventstream 实时流和 LLM 支持 Server-Sent Events (SSE) 支持,原生 LLM 流式 API 集成 @ahoo-wang/fetcher-generator OpenAPI 代码生成器 从 OpenAPI 规范生成 TypeScript 代码,专为 WOW 领域驱动设计框架打造 @ahoo-wang/fetcher-openapi OpenAPI TypeScript 类型 OpenAPI 3.0+ 规范的完整 TypeScript 类型定义 @ahoo-wang/fetcher-storage 跨环境存储 轻量级存储库,具有浏览器和 Node.js 的变更事件监听功能 @ahoo-wang/fetcher-react React 集成 React hooks 和组件,实现无缝数据获取和自动重新渲染 @ahoo-wang/fetcher-wow CQRS/DDD 框架支持 与 Wow CQRS/DDD 框架的一流集成 @ahoo-wang/fetcher-cosec 企业安全 CoSec 认证集成 🚀 快速开始 📦 安装 # 安装核心包 npm install @ahoo-wang/fetcher # 或安装所有扩展,包括 LLM 流支持 npm install @ahoo-wang/fetcher @ahoo-wang/fetcher-decorator @ahoo-wang/fetcher-eventstream @ahoo-wang/fetcher-cosec # 使用 pnpm (推荐) pnpm add @ahoo-wang/fetcher # 使用 yarn yarn add @ahoo-wang/fetcher ⚡ 快速示例 基础 HTTP 客户端 import { Fetcher } from '@ahoo-wang/fetcher'; // 创建 fetcher 实例 const fetcher = new Fetcher({ baseURL: 'https://api.example.com', timeout: 5000, }); // 带路径和查询参数的 GET 请求 const response = await fetcher.get('/users/{id}', { urlParams: { path: { id: 123 }, query: { include: 'profile' }, }, }); const userData = await response.json<User>(); // 自动 JSON 转换的 POST 请求 const createUserResponse = await fetcher.post('/users', { body: { name: 'John Doe', email: 'john@example.com' }, }); 声明式 API 服务 import { NamedFetcher } from '@ahoo-wang/fetcher'; import { api, get, post, path, query, body, } from '@ahoo-wang/fetcher-decorator'; // 注册命名 fetcher const apiFetcher = new NamedFetcher('api', { baseURL: 'https://api.example.com', }); // 使用装饰器定义服务 @api('/users', { fetcher: 'api' }) class UserService { @get('/') getUsers(@query('limit') limit?: number): Promise<User[]> { throw autoGeneratedError(limit); } @post('/') createUser(@body() user: User): Promise<User> { throw autoGeneratedError(user); } @get('/{id}') getUser(@path('id') id: number): Promise<User> { throw autoGeneratedError(id); } } // 使用服务 const userService = new UserService(); const users = await userService.getUsers(10); 强大的拦截器 import { Fetcher } from '@ahoo-wang/fetcher'; const fetcher = new Fetcher({ baseURL: 'https://api.example.com' }); // 添加带排序的请求拦截器 fetcher.interceptors.request.use({ name: 'auth-interceptor', order: 100, intercept(exchange) { exchange.request.headers.Authorization = 'Bearer ' + getAuthToken(); }, }); // 添加响应拦截器用于日志记录 fetcher.interceptors.response.use({ name: 'logging-interceptor', order: 10, intercept(exchange) { console.log('Response:', exchange.response.status); }, }); 实时流和 LLM 支持 import { Fetcher } from '@ahoo-wang/fetcher'; import { EventStreamInterceptor } from '@ahoo-wang/fetcher-eventstream'; const fetcher = new Fetcher({ baseURL: 'https://api.example.com' }); fetcher.interceptors.response.use(new EventStreamInterceptor()); // 流式实时事件 (通用 SSE) const response = await fetcher.get('/events'); if (response.eventStream) { for await (const event of response.eventStream()) { console.log('Real-time event:', event); } } // 流式 LLM 响应,逐个令牌输出 const llmResponse = await fetcher.post('/chat/completions', { body: { model: 'gpt-3.5-turbo', messages: [{ role: 'user', content: 'Hello!' }], stream: true, }, }); if (llmResponse.jsonEventStream) { // 专门用于 LLM API 的 JSON SSE 事件 for await (const event of llmResponse.jsonEventStream<ChatCompletionChunk>()) { const content = event.data.choices[0]?.delta?.content || ''; process.stdout.write(content); // 实时令牌输出 } } 🎯 集成测试示例 在我们的integration-test目录中探索全面、可用于生产的实现: 🌐 HTTP 操作 Typicode API 集成- 与 JSONPlaceholder API 的完整集成,演示实际使用 参数处理- 高级路径、查询和正文参数管理 错误处理- 全面的错误处理模式 🔧 高级模式 COSEC 认证- 具有令牌管理的企业级安全集成 拦截器链- 具有有序执行的复杂中间件模式 超时策略- 自适应超时配置 📡 实时特性 LLM 流式 API- 原生支持从大型语言模型流式响应 Server-Sent Events- 实时通知和更新 流数据- 具有自动重新连接的连续数据流 🎨 装饰器模式 声明式服务- 使用 TypeScript 装饰器的清晰、可维护的 API 服务层 元数据扩展- 用于高级用例的自定义元数据 类型安全 API- 完整的 TypeScript 集成和自动类型推断 🏗️ 开发和贡献 🛠️ 先决条件 Node.js >= 16 pnpm >= 8 🚀 开发命令 # 安装依赖 pnpm install # 构建所有包 pnpm build # 运行单元测试和覆盖率 pnpm test:unit # 格式化代码 pnpm format # 清理构建产物 pnpm clean # 运行集成测试 #pnpm test:it 📦 版本管理 同时更新所有包: pnpm update-version <new-version> 这会更新单体仓库中所有package.json文件的版本字段。 🤝 贡献 欢迎贡献!请查看我们的贡献指南获取详情: Fork 仓库 创建您的功能分支 (git checkout -b feature/AmazingFeature) 提交您的更改 (git commit -m 'Add some AmazingFeature') 推送到分支 (git push origin feature/AmazingFeature) 打开拉取请求 🧪 质量保证 代码覆盖率: 所有包保持在 95% 以上 TypeScript: 启用严格类型检查 代码检查: 使用 Prettier 的 ESLint 保证一致的代码风格 测试: 全面的单元和集成测试

优秀的个人博客,低调大师

Pyodide —— 在浏览器端实现 Python 全栈科学计算

Pyodide 由编译成 WebAssembly 的 CPython 3.8 解释器组成,允许 Python 在网页浏览器中运行。 Pyodide 可以安装来自 PyPi 的任何 Python 包。Pyodide 还包括一个外部函数接口,可以将 Python 包暴露给 JavaScript,并将浏览器 UI,包括 DOM,暴露给 Python。该项目还使许多 Python 科学包,包括 NumPy、Pandas、Matplotlib、SciPy 和 Scikit-learn,就可以在浏览器中运行。

优秀的个人博客,低调大师

Python全栈 Web(jQuery 一条龙服务)

jQuery 1.jQuery介绍 jQuery是一个轻量级的JS库 - 是一个被封装好的JS文件,提供了更为简便的元素操作方式 核心理念:Write Less Do More jQuery版本: jQuery 2.x 不再支持IE6.7.8 jQuery 1.11.x 2.使用jQuery 1.引入jQuery文件 <script src="jquery-1.11.3.js"></script> 注意:jQuery文件的引入操作必须要放在其他jQuery操作之前 3.jQuery对象 1.什么是jQuery对象 jQuery对象是由jQuery对页面元素进行封装后的一种体现 jQuery中所提供的所有的操作都只针对jQuery对象,DOM对象不能用 2.工厂函数 - $() 作用: 1.能够获取 jquery对象 2.能够将DOM对象转

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册