【应用】基于 Next.js 16 + Python mplfinance的金融K线图与技术指标可视化平台(三)

文章目录

    • 七、模拟行情数据生成
      • [7.1 设计目标](#7.1 设计目标)
      • [7.2 种子随机数 --- mulberry32](#7.2 种子随机数 — mulberry32)
      • [7.3 几何布朗运动模型](#7.3 几何布朗运动模型)
      • [7.4 偶发跳空与事件放量](#7.4 偶发跳空与事件放量)
      • [7.5 量价相关性](#7.5 量价相关性)
      • [7.6 日期生成](#7.6 日期生成)
      • [7.7 模拟标的列表](#7.7 模拟标的列表)
    • 八、数据库设计
      • [8.1 Prisma Schema](#8.1 Prisma Schema)
      • [8.2 数据库连接管理](#8.2 数据库连接管理)
      • [8.3 数据库文件路径](#8.3 数据库文件路径)

七、模拟行情数据生成

7.1 设计目标

项目不依赖外部行情数据源,而是通过 src/lib/stockData.ts 在内存中生成模拟 OHLCV 数据。这保证了演示的即时性和确定性------同一标的每次生成的序列完全相同,便于复现和调试。

7.2 种子随机数 --- mulberry32

使用 mulberry32 算法作为伪随机数生成器(PRNG),它是一种快速的 32 位哈希函数。种子通过对标的代码字符串做 FNV-1a 哈希得到,确保不同标的生成不同但可复现的序列:
#mermaid-svg-Sc0KYdJF43bVkUzN{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-Sc0KYdJF43bVkUzN .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-Sc0KYdJF43bVkUzN .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-Sc0KYdJF43bVkUzN .error-icon{fill:#552222;}#mermaid-svg-Sc0KYdJF43bVkUzN .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-Sc0KYdJF43bVkUzN .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-Sc0KYdJF43bVkUzN .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-Sc0KYdJF43bVkUzN .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-Sc0KYdJF43bVkUzN .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-Sc0KYdJF43bVkUzN .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-Sc0KYdJF43bVkUzN .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-Sc0KYdJF43bVkUzN .marker{fill:#333333;stroke:#333333;}#mermaid-svg-Sc0KYdJF43bVkUzN .marker.cross{stroke:#333333;}#mermaid-svg-Sc0KYdJF43bVkUzN svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-Sc0KYdJF43bVkUzN p{margin:0;}#mermaid-svg-Sc0KYdJF43bVkUzN .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-Sc0KYdJF43bVkUzN .cluster-label text{fill:#333;}#mermaid-svg-Sc0KYdJF43bVkUzN .cluster-label span{color:#333;}#mermaid-svg-Sc0KYdJF43bVkUzN .cluster-label span p{background-color:transparent;}#mermaid-svg-Sc0KYdJF43bVkUzN .label text,#mermaid-svg-Sc0KYdJF43bVkUzN span{fill:#333;color:#333;}#mermaid-svg-Sc0KYdJF43bVkUzN .node rect,#mermaid-svg-Sc0KYdJF43bVkUzN .node circle,#mermaid-svg-Sc0KYdJF43bVkUzN .node ellipse,#mermaid-svg-Sc0KYdJF43bVkUzN .node polygon,#mermaid-svg-Sc0KYdJF43bVkUzN .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-Sc0KYdJF43bVkUzN .rough-node .label text,#mermaid-svg-Sc0KYdJF43bVkUzN .node .label text,#mermaid-svg-Sc0KYdJF43bVkUzN .image-shape .label,#mermaid-svg-Sc0KYdJF43bVkUzN .icon-shape .label{text-anchor:middle;}#mermaid-svg-Sc0KYdJF43bVkUzN .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-Sc0KYdJF43bVkUzN .rough-node .label,#mermaid-svg-Sc0KYdJF43bVkUzN .node .label,#mermaid-svg-Sc0KYdJF43bVkUzN .image-shape .label,#mermaid-svg-Sc0KYdJF43bVkUzN .icon-shape .label{text-align:center;}#mermaid-svg-Sc0KYdJF43bVkUzN .node.clickable{cursor:pointer;}#mermaid-svg-Sc0KYdJF43bVkUzN .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-Sc0KYdJF43bVkUzN .arrowheadPath{fill:#333333;}#mermaid-svg-Sc0KYdJF43bVkUzN .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-Sc0KYdJF43bVkUzN .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-Sc0KYdJF43bVkUzN .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Sc0KYdJF43bVkUzN .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-Sc0KYdJF43bVkUzN .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Sc0KYdJF43bVkUzN .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-Sc0KYdJF43bVkUzN .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-Sc0KYdJF43bVkUzN .cluster text{fill:#333;}#mermaid-svg-Sc0KYdJF43bVkUzN .cluster span{color:#333;}#mermaid-svg-Sc0KYdJF43bVkUzN div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-Sc0KYdJF43bVkUzN .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-Sc0KYdJF43bVkUzN rect.text{fill:none;stroke-width:0;}#mermaid-svg-Sc0KYdJF43bVkUzN .icon-shape,#mermaid-svg-Sc0KYdJF43bVkUzN .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Sc0KYdJF43bVkUzN .icon-shape p,#mermaid-svg-Sc0KYdJF43bVkUzN .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-Sc0KYdJF43bVkUzN .icon-shape .label rect,#mermaid-svg-Sc0KYdJF43bVkUzN .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Sc0KYdJF43bVkUzN .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-Sc0KYdJF43bVkUzN .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-Sc0KYdJF43bVkUzN :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} symbol 字符串

e.g. 'DEMO.600519'
FNV-1a 哈希

2166136261 → 逐字符 XOR & 乘
32 位种子值
mulberry32(seed)
均匀随机数 [0,1)
Box-Muller → 标准正态分布

typescript 复制代码
function hashSymbol(symbol: string): number {
  let h = 2166136261  // FNV offset basis
  for (let i = 0; i < symbol.length; i++) {
    h ^= symbol.charCodeAt(i)
    h = Math.imul(h, 16777619)  // FNV prime
  }
  return h >>> 0
}

7.3 几何布朗运动模型

行情生成基于 几何布朗运动(GBM),这是金融工程中描述股价运动的标准数学模型。核心公式为:

S_{t+1} = S_t × (1 + drift + midTrend + ε × σ × regime)

其中各参数含义:

参数 含义 来源
drift 日漂移率(长期趋势) 标的元信息,如白酒 0.0004、半导体 0.001
midTrend 中期趋势摆动 sin(trendPhase) × 0.0022,模拟牛熊周期
ε 标准正态随机数 Box-Muller 变换
σ 基础波动率 标的元信息,如银行 0.012、芯片 0.033
regime 波动率状态切换 1 + sin(...) × 0.55,模拟高/低波动率市场环境

7.4 偶发跳空与事件放量

约 3% 的交易日会触发"事件跳空"------价格突然跳升或跳跌 1.5~3.5 倍日波动率。这模拟了突发利好/利空导致的价格跳空,使生成的 K 线图更贴近真实市场形态。同时,跳空当日的成交量会额外放大 1.4 倍,体现"量价配合"的市场规律。

7.5 量价相关性

成交量并非纯随机,而是与当日价格振幅正相关:
#mermaid-svg-Uatg9sPY5MO9mdKx{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-Uatg9sPY5MO9mdKx .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-Uatg9sPY5MO9mdKx .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-Uatg9sPY5MO9mdKx .error-icon{fill:#552222;}#mermaid-svg-Uatg9sPY5MO9mdKx .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-Uatg9sPY5MO9mdKx .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-Uatg9sPY5MO9mdKx .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-Uatg9sPY5MO9mdKx .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-Uatg9sPY5MO9mdKx .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-Uatg9sPY5MO9mdKx .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-Uatg9sPY5MO9mdKx .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-Uatg9sPY5MO9mdKx .marker{fill:#333333;stroke:#333333;}#mermaid-svg-Uatg9sPY5MO9mdKx .marker.cross{stroke:#333333;}#mermaid-svg-Uatg9sPY5MO9mdKx svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-Uatg9sPY5MO9mdKx p{margin:0;}#mermaid-svg-Uatg9sPY5MO9mdKx .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-Uatg9sPY5MO9mdKx .cluster-label text{fill:#333;}#mermaid-svg-Uatg9sPY5MO9mdKx .cluster-label span{color:#333;}#mermaid-svg-Uatg9sPY5MO9mdKx .cluster-label span p{background-color:transparent;}#mermaid-svg-Uatg9sPY5MO9mdKx .label text,#mermaid-svg-Uatg9sPY5MO9mdKx span{fill:#333;color:#333;}#mermaid-svg-Uatg9sPY5MO9mdKx .node rect,#mermaid-svg-Uatg9sPY5MO9mdKx .node circle,#mermaid-svg-Uatg9sPY5MO9mdKx .node ellipse,#mermaid-svg-Uatg9sPY5MO9mdKx .node polygon,#mermaid-svg-Uatg9sPY5MO9mdKx .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-Uatg9sPY5MO9mdKx .rough-node .label text,#mermaid-svg-Uatg9sPY5MO9mdKx .node .label text,#mermaid-svg-Uatg9sPY5MO9mdKx .image-shape .label,#mermaid-svg-Uatg9sPY5MO9mdKx .icon-shape .label{text-anchor:middle;}#mermaid-svg-Uatg9sPY5MO9mdKx .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-Uatg9sPY5MO9mdKx .rough-node .label,#mermaid-svg-Uatg9sPY5MO9mdKx .node .label,#mermaid-svg-Uatg9sPY5MO9mdKx .image-shape .label,#mermaid-svg-Uatg9sPY5MO9mdKx .icon-shape .label{text-align:center;}#mermaid-svg-Uatg9sPY5MO9mdKx .node.clickable{cursor:pointer;}#mermaid-svg-Uatg9sPY5MO9mdKx .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-Uatg9sPY5MO9mdKx .arrowheadPath{fill:#333333;}#mermaid-svg-Uatg9sPY5MO9mdKx .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-Uatg9sPY5MO9mdKx .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-Uatg9sPY5MO9mdKx .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Uatg9sPY5MO9mdKx .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-Uatg9sPY5MO9mdKx .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Uatg9sPY5MO9mdKx .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-Uatg9sPY5MO9mdKx .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-Uatg9sPY5MO9mdKx .cluster text{fill:#333;}#mermaid-svg-Uatg9sPY5MO9mdKx .cluster span{color:#333;}#mermaid-svg-Uatg9sPY5MO9mdKx div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-Uatg9sPY5MO9mdKx .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-Uatg9sPY5MO9mdKx rect.text{fill:none;stroke-width:0;}#mermaid-svg-Uatg9sPY5MO9mdKx .icon-shape,#mermaid-svg-Uatg9sPY5MO9mdKx .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Uatg9sPY5MO9mdKx .icon-shape p,#mermaid-svg-Uatg9sPY5MO9mdKx .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-Uatg9sPY5MO9mdKx .icon-shape .label rect,#mermaid-svg-Uatg9sPY5MO9mdKx .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Uatg9sPY5MO9mdKx .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-Uatg9sPY5MO9mdKx .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-Uatg9sPY5MO9mdKx :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 是
基础成交量

800万 × (0.6~1.4) 随机
最终成交量
|涨跌幅| / 日波动率
权重 0.9
跳空事件?
+1.4 倍

typescript 复制代码
const move = Math.abs((close - open) / open)
const baseVol = 8_000_000 * (0.6 + rnd() * 0.8)
const volume = Math.round(baseVol * (1 + move / dailyVol * 0.9 + (shock !== 0 ? 1.4 : 0)))

7.6 日期生成

从当前日期倒推,跳过周末(周六周日),生成约 520 个交易日(约两年)的日期序列。日期使用 ISO 格式 YYYY-MM-DD,保证 Python 端 pd.to_datetime 能正确解析。

7.7 模拟标的列表

代码 名称 行业 基础价 漂移率 波动率 特征
DEMO.600519 云山白酒 消费·白酒 168 0.04% 1.9% 低波动稳健白马
DEMO.300750 宁州新能源 电力设备·电池 96 0.08% 2.8% 高成长高波动
DEMO.000001 蓝湾银行 金融·银行 12.6 0.02% 1.2% 极低波动防守型
DEMO.688111 衡芯半导体 科技·芯片 74 0.10% 3.3% 最高波动进攻型
DEMO.600036 招商航运 交运·港口 33 0.03% 1.6% 中低波动周期股

八、数据库设计

8.1 Prisma Schema

项目使用 SQLite 作为数据库,通过 Prisma ORM 访问。当前 Schema 定义了 UserPost 两个模型,作为扩展基础------模板项目预留了用户系统和内容管理的能力,KLine Studio 的核心业务暂未使用它们,但保留了完整的数据库基础设施。
#mermaid-svg-XR33TtetZIgjzRME{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-XR33TtetZIgjzRME .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-XR33TtetZIgjzRME .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-XR33TtetZIgjzRME .error-icon{fill:#552222;}#mermaid-svg-XR33TtetZIgjzRME .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-XR33TtetZIgjzRME .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-XR33TtetZIgjzRME .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-XR33TtetZIgjzRME .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-XR33TtetZIgjzRME .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-XR33TtetZIgjzRME .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-XR33TtetZIgjzRME .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-XR33TtetZIgjzRME .marker{fill:#333333;stroke:#333333;}#mermaid-svg-XR33TtetZIgjzRME .marker.cross{stroke:#333333;}#mermaid-svg-XR33TtetZIgjzRME svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-XR33TtetZIgjzRME p{margin:0;}#mermaid-svg-XR33TtetZIgjzRME .entityBox{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-XR33TtetZIgjzRME .relationshipLabelBox{fill:hsl(80, 100%, 96.2745098039%);opacity:0.7;background-color:hsl(80, 100%, 96.2745098039%);}#mermaid-svg-XR33TtetZIgjzRME .relationshipLabelBox rect{opacity:0.5;}#mermaid-svg-XR33TtetZIgjzRME .labelBkg{background-color:rgba(248.6666666666, 255, 235.9999999999, 0.5);}#mermaid-svg-XR33TtetZIgjzRME .edgeLabel .label{fill:#9370DB;font-size:14px;}#mermaid-svg-XR33TtetZIgjzRME .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-XR33TtetZIgjzRME .edge-pattern-dashed{stroke-dasharray:8,8;}#mermaid-svg-XR33TtetZIgjzRME .node rect,#mermaid-svg-XR33TtetZIgjzRME .node circle,#mermaid-svg-XR33TtetZIgjzRME .node ellipse,#mermaid-svg-XR33TtetZIgjzRME .node polygon{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-XR33TtetZIgjzRME .relationshipLine{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-XR33TtetZIgjzRME .marker{fill:none!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-XR33TtetZIgjzRME .edgeLabel{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-XR33TtetZIgjzRME .edgeLabel .label rect{fill:rgba(232,232,232, 0.8);}#mermaid-svg-XR33TtetZIgjzRME .edgeLabel .label text{fill:#333;}#mermaid-svg-XR33TtetZIgjzRME :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} authorId
User
String
id
PK
String
email
UK
String
name
DateTime
createdAt
DateTime
updatedAt
Post
String
id
PK
String
title
String
content
Boolean
published
String
authorId
FK
DateTime
createdAt
DateTime
updatedAt

8.2 数据库连接管理

src/lib/db.ts 使用全局单例模式管理 PrismaClient 实例,防止开发模式下热模块重载(HMR)反复创建连接导致连接池耗尽:

typescript 复制代码
const globalForPrisma = globalThis as unknown as {
  prisma: PrismaClient | undefined
}

export const db =
  globalForPrisma.prisma ??
  new PrismaClient({ log: ['query'] })

if (process.env.NODE_ENV !== 'production') globalForPrisma.prisma = db

8.3 数据库文件路径

开发环境下,DATABASE_URL 指向 file:/home/z/my-project/db/custom.db。部署时由 start.sh 动态设置,默认指向打包产物内的 /app/db/custom.db


相关推荐
cvcode_study25 分钟前
Ollama+ComfyUI 多模态
大数据·人工智能·python
小磊哥er2 小时前
深入解构Claude Code - 第 7 篇 · 连接外面的世界
javascript·ai编程
星核0penstarry2 小时前
试一试用gr.Workflow把AI多步骤串联变成可视化画布
人工智能·python·ai作画·api·ai编程·工作流·api聚合平台
taller_20002 小时前
【005】PiE 与传统 VBA 的核心区别
python·vba·pie·py
小磊哥er2 小时前
深入解构Claude Code - 第 6 篇 · 终端里的图形界面
javascript·ai编程
海兰2 小时前
【应用】基于 Next.js 16 + Python mplfinance的金融K线图与技术指标可视化平台(一)
javascript·python·金融
大衛說2 小时前
《Python 从入门到精通》系列总览与学习路线
开发语言·python·学习
小猴子爱上树2 小时前
跨境电商翻译工具推荐:批量图片翻译、视频字幕翻译、智能抠图一站式搞定
人工智能·python·音视频
丈剑走天涯3 小时前
基于 Python 3 语法的 PyCharm 练习示例,涵盖列表操作、类型判断及数据清洗等核心知识点
windows·python·pycharm