前复权、不复权和后复权到底有什么区别?用 Python 看懂股票价格变化

Pandas入门教程(二十二):股票数据分析实战——yfinance 获取数据、技术指标与收益率分析 把 Pandas 用在真实场景,才能体会它的价值。本文以茅台股票为例,用 yfinance 获取历史行情,完成缺失值处理与列筛选,绘制收盘价曲线,计算 SMA 移动平均线与 RSI 相对强弱指数,并通过日收益率、累计收益率和波动率完成完整的量化分析流程。 阅读详情

一句话回答

前复权、不复权和后复权,区别主要在于如何处理股票分红、送股、转增等公司行动带来的价格变化。不复权保留历史原始价格,前复权通常以较新的价格为基准调整过去的价格,后复权则以较早的价格为基准调整后续价格。在量化开发中,选错复权方式可能直接影响涨跌幅、技术指标和历史走势分析。使用 QuantDash Python SDK,可以分别获取三种价格序列,再通过 Python 验证它们的差异。

为什么会有这个问题 / 传统做法有什么问题?

刚接触股票历史行情时,很多开发者会有一个疑问:

明明股票没有出现严重利空,为什么历史 K 线中会突然出现一次大幅下跌?

有时候,这个下跌并不是市场交易造成的,而是股票发生了除权除息。

举个简单的假设场景。

某只股票在除权除息前,收盘价为 100 元。公司实施每 10 股送 10 股,不考虑现金分红和其他因素。

除权后,原来持有的 100 股变成 200 股。假设市场对公司的整体估值没有变化,理论上的除权参考价格就会变成 50 元。

如果只看价格:

时间不复权价格前复权价格后复权价格
除权前100 元50 元100 元
除权后50 元50 元100 元

注意,这是一组为了说明复权原理而构造的简化数据,不代表实际行情接口的输出。

三种处理方式的差别就很明显了。

1. 不复权:保留当时实际记录的价格

除权前是 100 元,除权后是 50 元。

如果直接计算涨跌幅:

[
R=\frac{50-100}{100}=-50%
]

结果显示下跌 50%。

但实际上,投资者持有的股票数量翻倍了。假设不考虑其他因素,持仓总市值并没有减少。

因此,这个 -50% 不能直接理解为真实投资损失。

2. 前复权:调整过去的价格

前复权通常把历史价格调整到较新的价格基准上。

在这个例子中,除权前的 100 元被调整成 50 元,除权后的价格仍然是 50 元。

调整后的价格变化为:

[
R=\frac{50-50}{50}=0%
]

这样可以消除单纯因为送股产生的价格断层。

3. 后复权:调整后来的价格

后复权通常保留较早时期的价格基准,将后续价格调整为可比较的价格序列。

在上述例子中,除权前保留 100 元,除权后的 50 元被调整为 100 元。

因此,后复权计算得到的区间价格变化同样为 0%。

需要注意,前复权和后复权不是简单地给所有股票价格加上或减去一个固定数值。常见的比例复权会根据公司行动对应的调整因子处理价格。

此外,复权价格只是经过调整的分析价格,不代表当时真实可成交的市场价格。

这也是为什么量化系统需要明确区分:

  • 原始行情价格。
  • 复权后的分析价格。
  • 真实持仓中的股票数量与现金变化。

传统做法中,开发者可能直接从不同网站下载历史行情,再用 Excel 拼接和计算。

问题是,不同数据源可能使用不同复权方式,更新基准也可能不同。

如果研究程序没有记录数据口径,同一只股票就可能得到不同的涨跌幅结果。

更稳妥的方式,是在行情接入时明确指定复权方式,再统一进行后续计算。

分步骤解决:使用 QuantDash 进行实践

第 1 步:安装 SDK 并初始化客户端

这里使用 QuantDash Python SDK 获取历史日 K 线。

安装命令:

# 在终端执行
# pip install quantdash

实际在终端中运行:

pip install quantdash

然后初始化客户端:

import os
import pandas as pd
from quantdash import QuantDash

api_key = os.getenv("QUANTDASH_API_KEY")

if not api_key:
    raise RuntimeError(
        "请先设置 QUANTDASH_API_KEY 环境变量"
    )

qd = QuantDash(api_key=api_key)

这里通过环境变量读取 QUANTDASH_API_KEY,避免将凭证直接写进源代码。

初始化完成后,就可以调用历史 K 线接口。

第 2 步:分别获取三种复权数据

QuantDash 的 qd.klines.get() 接口支持通过 adjust 参数指定复权方式。

我们选择同一只股票、同一个周期、同样的请求条数,比较三种价格序列。

symbol = "600519.SH"

adjust_modes = {
    "none": "不复权",
    "forward": "前复权",
    "backward": "后复权",
}

price_data = {}

for mode, label in adjust_modes.items():
    try:
        df = qd.klines.get(
            symbol,
            period="1d",
            count=250,
            adjust=mode,
            to_dataframe=True,
        )

        if not isinstance(df, pd.DataFrame):
            raise TypeError("接口未返回 DataFrame")

        if df.empty:
            raise ValueError("历史行情数据为空")

        required_columns = {"trade_date", "close"}

        missing = required_columns - set(df.columns)

        if missing:
            raise ValueError(
                f"缺少必要字段: {sorted(missing)}"
            )

        data = df[["trade_date", "close"]].copy()

        data["trade_date"] = pd.to_datetime(
            data["trade_date"],
            errors="coerce",
        )

        data["close"] = pd.to_numeric(
            data["close"],
            errors="coerce",
        )

        if (
            data["trade_date"].isna().any()
            or data["close"].isna().any()
            or (data["close"] <= 0).any()
        ):
            raise ValueError("日期或价格存在非法值")

        if data["trade_date"].duplicated().any():
            raise ValueError("存在重复交易日期")

        price_data[mode] = (
            data.sort_values("trade_date")
            .set_index("trade_date")["close"]
            .rename(mode)
        )

        print(f"{label}: 获取 {len(data)} 条记录")

    except Exception as exc:
        raise RuntimeError(
            f"{label}行情获取或校验失败"
        ) from exc

代码中的几个参数值得说明。

symbol 是股票代码,这里使用 600519.SH。

period=“1d” 表示获取日 K 线。

count=250 表示请求 250 条记录,实际返回条数需要检查。

adjust=“none” 表示不复权。

adjust=“forward” 表示前复权比例调整。

adjust=“backward” 表示后复权比例调整。

to_dataframe=True 表示要求返回 pandas DataFrame。

这里使用的 trade_date 和 close 字段可在 SDK 日 K 线文档示例中找到。正式接入时,仍需要根据实际版本的返回结构校验。

另外,查询范围内不一定发生过除权除息。如果没有发生相关公司行动,三种价格序列可能完全相同,或者只存在精度上的细微差异。

第 3 步:对齐交易日期并比较价格

获取三组数据后,不能直接按 DataFrame 行号进行比较。

正确做法是先根据交易日期对齐。

comparison = pd.concat(
    [
        price_data["none"],
        price_data["forward"],
        price_data["backward"],
    ],
    axis=1,
    join="inner",
).sort_index()

if comparison.empty:
    raise ValueError("三组行情没有共同交易日期")

comparison = comparison.rename(
    columns={
        "none": "raw_close",
        "forward": "forward_close",
        "backward": "backward_close",
    }
)

comparison["forward_ratio"] = (
    comparison["forward_close"]
    / comparison["raw_close"]
)

comparison["backward_ratio"] = (
    comparison["backward_close"]
    / comparison["raw_close"]
)

print(comparison.tail(10).round(4))

这段代码主要完成三件事。

第一,找到三种复权方式共同拥有的交易日期。

第二,形成对应的原始价格、前复权价格和后复权价格。

第三,计算复权价格与原始价格之间的比例。

例如:

[
F_t^{forward}=
\frac{P_t{forward}}{P_t{raw}}
]

这个比例可以帮助观察复权调整效果,但不能直接认定它就是 SDK 提供的官方复权因子。

真正的复权因子还涉及基准、累计方式以及公司行动调整规则。

如果数据中存在分红、送股等情况,我们就可能看到历史价格的调整比例发生变化。

第 4 步:检查三种价格计算出来的收益率

仅比较价格还不够。

开发者更关心的是:不同复权方式计算出来的日收益率有什么差异?

returns = comparison[
    [
        "raw_close",
        "forward_close",
        "backward_close",
    ]
].pct_change(fill_method=None)

returns = returns.rename(
    columns={
        "raw_close": "raw_return",
        "forward_close": "forward_return",
        "backward_close": "backward_return",
    }
)

if len(returns) < 2:
    raise ValueError("数据不足,无法计算日收益率")

returns["raw_forward_gap"] = (
    returns["raw_return"]
    - returns["forward_return"]
).abs()

returns["forward_backward_gap"] = (
    returns["forward_return"]
    - returns["backward_return"]
).abs()

print(
    returns.sort_values(
        "raw_forward_gap",
        ascending=False,
    ).head(10).round(6)
)

这里使用 pandas 的 pct_change() 计算相邻交易日的价格收益率。

重点观察两个字段:

raw_forward_gap:不复权收益率与前复权收益率之间的差异。

forward_backward_gap:前复权与后复权收益率之间的差异。

对于同一组公司行动、同一套比例调整规则,前复权与后复权的相邻价格收益率通常应当非常接近。

而在除权除息附近,不复权收益率与复权收益率可能出现较大差异。

不过,这并不意味着每个出现差异的日期都必然发生了公司行动。还需要结合除权记录、数据精度和源数据修订进一步核对。

同时,复权价格收益率不等同于完整账户收益率。真实持仓还需要考虑现金分红、股票数量变化、交易费用和税费。

关键坑与注意事项

  • 不要把不复权价格跳空直接认定为市场暴跌。 遇到异常涨跌幅时,需要核查对应日期是否发生除权除息,不能仅凭价格序列判断行情异常。

  • 前复权价格不一定长期固定。 当后续发生新的公司行动时,历史前复权价格可能因复权基准更新而变化,建议记录数据获取时间和版本。

  • 后复权价格不等于实际成交价格。 后复权价格可能随着历史公司行动累计而显著高于原始股价,不能直接用于模拟成交和资金冻结。

  • 必须按交易日期对齐。 三次接口请求可能存在返回数量或交易日期差异,不能默认第 N 行对应同一天。

  • 不要忽略字段类型和空数据。 日期字段转换失败、价格为字符串或存在重复日期,都可能让后续比较出现错误。

  • 比例复权与加法复权不能混为一谈。 QuantDash 还提供 forward_additive 和 backward_additive。比例复权更适合相对收益率分析,加法复权更适合观察绝对价差,两者不能随意互换。

常见问题(FAQ)

Q:为什么前复权后的历史价格可能变得很低?

A:因为前复权需要把较早的价格调整到较新的价格基准。对于长期发生送股、转增等公司行动的股票,较早时期的前复权价格可能明显低于原始价格。

Q:不复权价格是不是最真实的价格?

A:不复权更接近当时实际记录的市场交易价格。但它不能直接代表投资者的完整持仓收益,因为投资者还可能获得现金分红或新增股份。

Q:前复权和后复权计算出的涨跌幅一样吗?

A:如果使用相同的公司行动信息、相同的比例调整规则,且计算区间与基准一致,两者的相对价格收益率通常相同或非常接近。实际数据仍需要验证。

Q:QuantDash 会自动计算我的持仓收益吗?

A:这里使用的是 SDK 获取不同复权口径的历史 K 线。账户持仓数量变化、现金分红入账、交易费用和税费等,需要业务系统结合其他数据自行计算。

Q:为什么我获取的三种价格没有明显区别?

A:可能是查询区间没有发生相关公司行动,也可能是股票历史调整幅度较小。建议检查样本时间范围和公司行动记录,不要人为制造价格差异。

小结

前复权、不复权和后复权并不是三种不同的股票行情,而是对同一段历史价格采用了不同的调整方式。不复权保留原始价格,前复权侧重把历史价格调整到较新基准,后复权则从较早的价格基准向后调整。理解这个区别,可以避免把除权除息误判成真实市场涨跌。

在工程实践中,QuantDash Python SDK 可以通过 adjust 参数获取指定复权口径的历史 K 线,减少开发者重复维护数据接入逻辑的工作。不过,交易日期对齐、异常价格识别、公司行动核对以及数据版本管理,仍然需要研究系统自行完成。

真正可靠的历史行情处理,不只是能得到一条价格曲线,还需要明确这条曲线使用什么口径、适合什么计算,以及能否在未来重新复现。

参考

QuantDash Python SDK 文档:https://docs.quantdash.net/zh-Hans/sdk/python-quickstart

如何处理动态语言(Python / JS)的“隐形”调用链? 本文揭示动态语言(Python/JS)中静态AST解析导致调用链“断链”的核心问题,提出通过运行时追踪补全图谱的解决方案。基于Code-Graph-RAG的cgr trace机制,分别利用pytest插件与V8 Profiler捕获真实调用路径,将动态边合并至静态图谱,并在权重体系中提升动态边优先级。实践表明,该方法可显著提升图谱覆盖率,实现“结构+行为”双视角理解代码,为MCP与Rerank系统提供可靠支持。 阅读详情

相关推荐

知识见闻 - Salesforce公司发展史

不过,通过将自己开发的产品与公司收购的其它云产品进行结合,Salesforce可以为用户提供更多的产品种类,Salesforce可以继续强化自己的平台和产品套件属性,这一平台和套件的发展规模已经远远超出了一个单一的CRM的规模。他们围绕一个相对简单的产品向用户兜售云的概念,然后,他们开始开发其它产品,并寻找培育一个不断增长的生态系统的方法,最理想的情况是能驱动Salesforce的营收增长。现在,Salesforce通过打造更多的用例并改进自己产品的方式来直接应对竞争对手的竞争,从而捍卫自己现在的地位。

guoqx的专栏 1451

从除权因子到复权价格:量化回测中如何正确计算前复权与后复权?

复权非简单乘法,而是基于除权因子与时间方向构建连续价格序列。错误复权会导致指标失真、回测收益偏差。前复权适配技术分析,后复权利于长期走势研究,不复权反映真实成交价。量化系统应统一数据口径,优先使用如QuantDash等平台提供的官方复权数据,避免自行计算带来的工程成本与误差风险。

weixin_45515140的博客 253

[Windows] 发票识别工具。支持xml、pdf、ofd文件。

发票识别是财务自动化中的关键环节,支持多种格式(XML、PDF、OFD)的识别工具能显著提升工作效率。以下介绍基于Windows平台开发此类工具的技术方案。发票识别是财务自动化中的关键环节,支持多种格式(XML、PDF、OFD)的识别工具能显著提升工作效率。以下介绍基于Windows平台开发此类工具的技术方案。

pZC_dqux的博客 666

使用历史 K 线研究长期收益时,为什么要明确复权口径?

研究股票长期收益时,忽视复权口径可能导致严重误判。未经复权的价格因分红、送股等权益事件产生跳变,无法真实反映投资回报。前复权适合分析趋势,后复权体现累计增长,但均不等于实际收益。真正的投资回报还需考虑分红再投资、税费与交易成本。使用数据时应明确复权方式,并确保研究逻辑与历史信息一致性,避免未来数据泄漏。

2601_96694965的博客 369

ubuntu18.04安装R——无法连接上 dl.google.com:80 (6.6.6.6),连接超时&&E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。

安装R的时候,sudo apt update 的时候出现错误: 查资料要修改/etc/apt/sources.list.d/google-chrome.list 文件 原来是: deb http://dl.google.com/linux/chrome/deb/ stable main 改为: deb [arch=amd64] http://dl.google.com/linux/chrom...

许希律的博客 4349

用Linkboy玩转Arduino:3小时搞定智能倒车雷达(附仿真文件下载)

本文详细介绍了如何利用Linkboy图形化编程工具,在3小时内快速搭建一个基于Arduino的智能倒车雷达项目。通过仿真环境,初学者无需硬件即可学习超声波测距原理、报警逻辑设计,并完成从虚拟仿真到实体硬件的完整流程。文章提供了清晰的步骤、调试技巧及功能扩展思路,并附有仿真文件,是入门Arduino和智能硬件制作的绝佳实践指南。

weixin_29159441的博客 403

AI全栈实战 | 3.9-01 爬虫入门:requests 加 BeautifulSoup 三分钟跑通,但 90% 的人栽在这 4 个“礼貌“问题上

⚠️:本文内容仅用于。请遵守目标站点的服务条款与相关法律法规,不得对目标服务造成负担,不得采集、传播个人隐私数据。技术是中性的,边界在你手里。爬虫的入门技术(requests 发请求 + BeautifulSoup 解析)三分钟就能学会。真正区分"会用爬虫"和"会做爬虫的人"的,是这篇我们跑通"请求→解析→存储"的最小闭环,然后重点把"合规与礼貌"这根弦给你绷上。

源码获取 | 运行部署 | 定制二开修改,如果回复不及时请耐心等待,请见谅。 405

告别配置迷茫:手把手教你用Vivado 2023.1配置Xilinx FPGA的DDR4 MIG IP核(含AXI接口详解)

本文详细介绍了如何在Vivado 2023.1中配置Xilinx FPGA的DDR4 MIG IP核,包括AXI接口的深度解析与优化。通过实战案例和调试技巧,帮助工程师快速掌握DDR4内存与FPGA的协同工作,提升系统性能。特别适合需要高性能计算和实时信号处理的开发者。

weixin_29231725的博客 437

从一段视频到可漫游的 4D 有声场景:思路拆解与最小复现手记

只需一段手机视频,你就能生成可"走进去"的 4D 有声场景:转头时狗叫声方向随之变化,走近时声音更清晰。本文拆解 Video-to-4DAVScene 的核心思路,手把手带你用几十行 Python 搭出最小管线,把视频中的运动物体变成带空间位置的声源,并附上三个真实踩坑的排障经验,代码可直接跑。🎧

helloagent的博客 234

CMU的local_planner学习笔记

ros::Subscriber subOdometry = nh.subscribe//当接收到/state_estimation话题消息更新时启动odometryHandler回调函数 (消息格式:nav_msgs::Odometry消息内容:关于机器人或车辆的位置和方向(姿态)信息)pcl::PointCloud::Ptr freePaths(new pcl::PointCloud());

qq_35971623的博客 3877

利用PaddleOCR识别增值税发票平台验证码(开箱即用)

下面直接讲解利用paddleocr识别的思路,为什么使用paddleocr,因为paddle中集成了较好的ocr文字识别模型,开箱即用即可,废话不多说,剑指主题,识别思路步骤如下。

码王吴彦祖的博客 5544

【每天一个 Python 小案例30】Python 基础知识综合小项目:我的工具盒

作为系列收官,本篇把前 29 篇的知识点合成一个能直接用的命令行工具"我的工具盒":计算器(用 ast 解析表达式,不碰 eval)、单位换算与温度转换(一张换算表 + 特例分支)、记账与分类统计(Decimal + JSON 持久化)、以及用"字典当命令表"把菜单和业务逻辑解耦的主循环。文中对比了 eval 的安全隐患与 ast 白名单的做法,解释了 lambda 闭包在字典里的写法与晚绑定陷阱,并在最后给出整个系列的知识地图,把变量、数据结构、控制流、函数、类、异常、文件、标准库八块内容对应到具体篇目。

xinjiyaya的博客 426

避坑指南!YOLO26模型导出/推理常见问题,99%的开发者都踩过

版本锁定:Ultralytics=8.4.2、OpenVINO=2024.0.0、Python=3.10,版本不一致是80%问题的根源;参数对齐:训练/导出/推理的imgsz、归一化、坐标映射必须完全一致,差一步就出错;算子统一:避免自定义算子,优先用YOLO26原生算子(C3k2/PSABlock),确保推理引擎兼容;分步验证:导出后先校验ONNX/IR模型→单图片推理→RTSP流推理→72小时稳定性测试,一步过易踩坑;工业级测试。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 510

详解Python条件语句

在 Python 中,if...else 是一种条件语句,可以根据给定的条件执行不同的操作。这个语句通常用于控制程序的流程。

2601_96798737的博客 206

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Python3 协程:异步编程的核心机制与实战

协程是解决I/O密集型任务等待瓶颈的高效机制,相比线程更轻量、无锁开销。从yield到async/await的演进,使异步编程语义清晰、易于理解。通过async/await可实现并发执行多个任务(如gather、create_task),显著提升网络请求、爬虫等场景性能。关键在于使用异步库(如aiohttp)替代同步库,避免阻塞事件循环。合理控制超时与并发数,才能发挥协程最大优势。

Lxn2zh的博客 159

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

二进制木马免杀-Python 分离免杀与 Web 挂马

二进制木马免杀-Python 分离免杀与 Web 挂马

2503_94637398的博客 268

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

torch.compile 差异仅 1e-6,边界样本预测为何翻转

torch.compile 加速后输出与 eager 不一致,部分预测翻转。逐层对比与 graph break 分析定位到动态分支翻转根因。容差回归仅适用于无分支翻转场景,零容忍场景应禁用编译。

昨日种种,皆成今我。今日种种,皆成新我。 159

蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级 备考:莫队算法离线区间查询详解

备赛进行时:第十八届蓝桥杯软件赛报名已于 2026-10-08 10:00 开启、12-18 14:00 截止,省赛定在 2027-04-10(C/C++·Python 程序设计 9:00–13:00);中国电子学会 2026 年 12 月软件编程(C/C++ 一级至十级、Python 一级至六级)考级报名 9/23–12/2 16:00、统考 12-12;全国青少年信息素养大赛 2026—2027 赛季算法应用主题赛也已进入复盘练兵窗口。

IT_Scratch的博客 128

【Python】国家中小学智慧教育平台电子教材批量下载与 PDF 合成实战

成果:两本语文电子课本(一年级上册 118 页 / 23MB、三年级上册 130 页 / 30.3MB),合计 248 页、约 54MB,单本下载加合成 40~60 秒,PDF 页数校验全部通过。经验教训SPA 站点的数据接口优先从 bundle 里挖,比抓页面稳得多;资源链接要按 private/public 分组看待,只取平台公开部分;页数、目录名这类“可推断”的信息,永远用实际响应验证一次;受限环境里“能不能跑浏览器”要在方案定稿前确认。后续计划:这版 PDF 是图片版,没有文字层;

木头大左的博客 134

魔塔社区微调训练Qwen2-1.5B-Instruct模型并烧录到‌RK3568开发板教程

本文基于Ubuntu 22.04 + CUDA 13.0.3环境,使用LLaMA-Factory框架对Qwen2-1.5B-Instruct模型进行LoRA微调,训练儿童故事生成专用模型。通过配置qwen模板、制作alpaca格式数据集、执行sft训练并合并LoRA权重,最终将模型转换为GGUF格式,并量化为Q4_K_M以适配RK3568嵌入式平台。全程支持国产镜像加速下载与显存优化,实现高效轻量化部署。

浅清秋慕夏的博客 186

【回眸】DeepSeek V4.1 Flash 快速上手与实战

本文介绍如何高效本地部署开源大模型,通过现代化工具链实现分钟级环境搭建。聚焦显存优化、一键安装、代码调用与多轮对话实现,解决“显存不足”“连接超时”等痛点,提供参数调优与结构化输出技巧,助力开发者在离线场景下快速构建稳定、高效的本地推理系统。

啤酒鸭的物联网开发记录博客 223

智叟云集-手机证据抓取系统的工程结构与应用入口

本文系统阐述手机证据抓取系统的工程结构与应用入口,涵盖四大层面:工程目录划分(Android、Python服务、Web页面、测试与构建工具);Android组件通过Manifest声明可启动页面,主界面由MainActivity管理;Python服务通过run.py解析参数并启动FastAPI应用,支持远程访问;浏览器页面采用HTML/CSS/JS分离架构,静态资源通过路径关联,实现动态交互。各模块分工明确,协同构建可运行的采集系统。

2301_77178996的博客 232

Java Arrays.asList 常见坑详解|UnsupportedOperationException、数组联动、基本类型 bug

解析 Arrays.asList 常见开发陷阱,演示 UnsupportedOperationException、底层数组引用共享、基本类型数组问题,区分 Arrays 内部 ArrayList 与 java.util.ArrayList,给出数组转 List 的各种场景正确代码。

weixin_42617033的博客 472

利用python中matplotlib.pyplot库绘制图

plt.plot(x,y) # x,y是每个点的坐标,plot()把每个点按顺序画折线。plt.subplots(2,2)表示绘制2*2的子图布局,axs[0,0]表示在第0行第0列绘制子图...coordinates_i[:,0]表示获取每一行(每一个spot)的第0列(x坐标)coordinates_i[:,1]表示获取每一行(每一个spot)的第0列(y坐标)plot.subplot(2,2,1) 表示子图布局是2*2的,开始绘制第一个。也可以导入数据绘制。可以设置color属性,设置颜色。

qq_46147236的博客 102

Spring Boot 自动配置原理

Spring Boot 自动配置由 @EnableAutoConfiguration 导入选择器,读取 jar 中 .imports 候选清单,经去重、排序、排除后逐类做条件判断,通过才注册 Bean。延迟导入让用户 Bean 优先,@ConditionalOnMissingBean 使默认配置让位。失效时查清单和 Negative matches。

2401_89855466的博客 375

【每天一个 Python 小案例29】Python 实现商品购物车

本篇实现一个购物车:商品目录、加入商品、修改数量、移除商品、查看小计、计算满减与 VIP 折扣、结算扣库存。核心设计是"目录与购物车分离"——目录存商品主数据,购物车只存 {商品编号: 数量};金额一律用 Decimal 并做 ROUND_HALF_UP 舍入。折扣部分讲清阶梯满减的匹配顺序(阈值从高到低、命中即停)与叠加顺序(先满减、后打折),并用一次完整结算演示 706 元如何变成 613.70 元。

xinjiyaya的博客 210
上一篇: 读取单只股票五档盘口:个人开发者的运行前检查、排错顺序与校验实践
下一篇: 美股分钟级行情数据从哪里获取?Python 获取历史 K 线及数据完整性检查
quantdash_cc
博客等级 码龄105天 38粉丝 233原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值