资讯详情

Day07 Python数据存储与运算实战全解

📅 2026/10/31 2:14:56 | 华诺云谱 👁 阅读
Day07 Python数据存储与运算实战全解
Day07 | Python数据存储与运算技术栈全解从内存模型到ATM取款机实战摘要本文是《AI应用开发筑基》系列的第一篇技术笔记聚焦Python编程中最底层的两块基石——数据存储字面量、变量、五大基本类型、内存模型与数据运算四种运算符、I/O交互、类型转换机制。全文采用概念解析→源码演示→输出验证→踩坑总结四步分析法逐层拆解每个知识点的底层逻辑。文末附ATM取款机完整实战带你从零写出第一个交互式Python程序。适合零基础入门及需要系统梳理Python基础的技术人员阅读。一、开篇为什么从数据存储与运算开始第一阶段我们搞完了AI应用开发入门Coze拖拉拽搭了个智能体说实话挺爽的——零代码、可视化、一键部署。但课程进入第二阶段画风一转直接让我们手写Python代码。这跳跃不小但逻辑很清晰。1.1 从Coze到原生开发的必然性Coze这类低代码平台本质上是一套通用组件积木。客服问答、内容摘要、标准化报表这些流程性强的场景它处理得确实漂亮。但一旦遇到下面这些情况业务逻辑深度定制比如金融风控模型的复杂决策树需要和企业内部ERP/CRM系统做深度数据交互对响应速度有极致要求毫秒级推理优化需要自定义模型微调策略Coze的黑盒特性就变成了天花板。接口受限、扩展性差、调试困难——这些问题在企业级项目中是致命的。这时候代码才是唯一的出路。1.2 Python的生态垄断地位那为什么企业级AI开发清一色选Python看一个简单的技术栈依赖链就明白了PyTorch/TensorFlow底层训练框架→ LangChain/LangGraph上层应用框架→ 数据处理与模型推理生态这整条链路几乎完全建立在Python之上。选别的语言意味着你要自己造轮子、自己搭桥开发成本翻倍不说社区支持也跟不上。TIOBE最新的榜单上Python以20.97%的份额继续霸榜第一。从AI大模型开发到Web后端、从数据分析到自动化运维Python的应用边界还在持续扩张。1.3 Day01在整个学习路线中的定位如果把整个Python学习路线比作盖楼Day01学的东西就是地基中的钢筋数据存储字面量、变量、数据类型→ 决定了你能在程序里记住什么数据运算运算符、I/O→ 决定了你能对数据做什么后面学的流程控制、函数、面向对象统统建立在这两块之上。地基不牢后面写再多代码也是空中楼阁。二、Python语言本质从解释器到编程范式2.1 编程语言的翻译官角色要理解Python得先搞清楚编程语言到底是干嘛的。人类语言中文、英文有一个天然特点模糊性和情感色彩。比如你真行这三个字用不同的语气说出来可以是夸赞、可以是讽刺、可以是无奈。这种歧义性对人类沟通来说不是问题但对计算机来说就是灾难——它只能理解二进制的0和1需要的是绝对的确定性。所以编程语言本质上是一套人类和计算机之间的通信协议。它必须满足两个条件人类能读懂、能编写能无歧义地翻译成计算机可执行的指令Python就扮演这个翻译官角色。你写Python代码 → Python解释器翻译成字节码 → 虚拟机执行 → 最终变成计算机能懂的二进制指令。2.2 Python的出身Python是荷兰人吉多·范罗苏姆业内叫龟叔1991年发布的。名字跟蟒蛇没关系是他痴迷的英剧《蒙提·蟒蛇的飞行马戏团》Monty Python’s Flying Circus。龟叔设计Python的初衷很朴素让编程变得简单、有趣。这也是为什么Python语法读起来几乎像英文——人生苦短我用Python不是口号是设计哲学。2.3 Python的应用领域矩阵Python如今的覆盖面有多大列几个方向感受一下领域典型技术栈热度AI大模型开发PyTorch LangChain Transformers极热门数据分析/可视化Pandas Matplotlib Seaborn很热门网络爬虫Scrapy BeautifulSoup Selenium很热门Web后端Django Flask FastAPI热门办公自动化openpyxl python-docx PyPDF2热门自动化测试Pytest Selenium Appium热门这也是我决定认真学Python的原因——不是学了可能会用而是不学肯定吃亏。三、开发环境技术栈从零搭建Python工作台3.1 Python解释器的技术原理前面说了Python需要解释器来翻译代码。具体来说Python解释器的工作流程分四步词法分析把你写的Python代码拆成一个一个的token关键字、标识符、运算符、字面量等语法分析检查token排列是否符合Python语法规则生成抽象语法树AST编译将AST编译为字节码.pyc文件这是一种中间表示执行Python虚拟机逐条执行字节码指令这就是为什么装Python 装解释器而不只是装一个编辑器。3.2 安装步骤3.14.4版本课程用的是3.14.4版本不是最新版。原因很实际——生态兼容性。最新版往往很多第三方库还没来得及适配用次新版本最稳。关键步骤右键安装包 → “以管理员身份运行”必勾选Add python.exe to PATH不勾后面哭着配环境变量选 Customize installation 自定义安装安装路径不要有中文和空格血的教训D:\develop\Python 这种路径最佳装完后WinR → cmd → 输入 python --version看到 Python 3.14.4 就说明装好了。3.3 环境变量PATH机制深度解析这是新手翻车率最高的环节。为什么装了Python命令行却不认识 python 命令PATH环境变量的本质操作系统在执行命令时会先在当前目录找找不到就去PATH列表里的每个路径挨个找。PATH就是一套搜索目录清单。安装时勾选了 Add python.exe to PATH安装程序会自动把两个目录加进去Python安装目录如 D:\develop\Python—— 里面有 python.exeScripts目录如 D:\develop\Python\Scripts—— 里面有 pip.exe没勾的话就手动加。右键此电脑 → 属性 → 高级系统设置 → 环境变量 → 在Path里新建这两条。3.4 uv新一代Python包管理器的技术优势Python自带的pip能用但慢。uv是Astral团队用Rust写的快10-100倍不是吹的。技术对比特性pipuv实现语言PythonRust依赖解析串行、慢并行、极快虚拟环境需配合venv内置锁文件无通用锁文件Python版本管理无(需pyenv)内置安装就一行pip install uv然后一定要切国内镜像不然下载依赖等得怀疑人生。推荐清华源。3.5 PyCharm IDE与虚拟环境机制IDE选了PyCharmPython开发的事实标准。创建项目时选uv作为解释器类型。创建完后你会看到.venv/ 文件夹 → 项目专属的虚拟环境里面有独立的Python解释器和依赖库main.py → 入口文件pyproject.toml → 项目配置文件名称、版本、依赖列表虚拟环境的核心价值项目A用Django 4.2项目B用Django 5.0两个项目跑在各自的 .venv 里谁也不影响谁。这个隔离机制在多人协作和微服务架构中是必须的。四、数据存储层深度解析字面量、变量与内存模型好了环境搭完了终于可以写代码了。第一关搞清楚数据是怎么在程序里存的。4.1 字面量Literal程序中的数据表示法字面量就是代码中直接书写的固定值。这个概念其实你从学数学就在用——你写 10它就是10本身不需要通过计算得到。Python中字面量分为六大类4.1.1 整数intPython的整数是任意精度的不像C/Java那样有32位/64位的上限。理论上你可以写一个几百位的整数Python照样算。4.1.2 浮点数floatPython的float底层用的是IEEE 754双精度浮点数标准。这意味着不是所有小数都能精确表示。比如 0.1 0.7 可能输出 0.7999999999999999而不是 0.8。这不是Python的bug是所有语言用二进制存小数都会遇到的问题。高精度场景用 decimal 模块兜底。4.1.3 字符串strPython不区分单双引号这点跟JavaScript一样。三引号适合定义多行文本。4.1.4 布尔值bool关键细节Python的bool是int的子类True等于1False等于0。所以 10 True 结果是 1120 False 结果是 20。4.1.5 空值NoneNone是NoneType类型的唯一值单例模式。用于表示变量尚未赋值、函数没有返回值等场景。4.1.6 数据容器概览列表 [1,2,3]、元组 (1,2,3)、集合 {1,2,3}、字典 {name: value}——后面会详细展开Day01先混个脸熟。4.2 变量VariablePython的内存模型变量是程序中用来存储数据的内存空间。你可以把它想象成一个带标签的盒子——标签是变量名盒子里装的是数据。4.2.1 变量的定义与本质Python赋值语句的底层操作在内存中创建数据对象如459.3这个float对象将变量名绑定到这个对象上本质上是指向对象的引用4.2.2 Python的动态类型机制Python是动态类型语言——变量本身没有固定类型类型信息存在数据对象上。同一个变量x前后可以指向int对象和str对象。这在Java/C里是不允许的但在Python里完全没问题。好处是灵活代价是IDE的类型提示不够精准所以现在有了类型注解来弥补。4.2.3 变量值的更新机制每次 count count 100 的执行过程取出count当前指向的值459.3计算 459.3 100 559.3创建一个新的float对象 559.3将count重新绑定到这个新对象上旧对象459.3如果没有其他引用等待垃圾回收4.3 标识符Identifier命名规范硬规矩违反就报错只能由字母a-z/A-Z、数字0-9、下划线_组成不能以数字开头6num 报错num6 可以不能是Python关键字and、if、for、while、True、False、None等严格区分大小写age、Age、AGE 是三个不同的变量软规范PEP8建议不遵守也能跑但会被同事吐槽见名知意user_name 比 a 好一万倍蛇形命名法snake_case多个单词用下划线连接全小写不要用拼音除非是中国人自己维护的内部项目4.4 变量交换两种实现方式的技术对比经典面试题不借助第三个变量怎么交换a和b的值a10b20# 方式一中间变量法最直观ca# c10ab# a20bc# b10# 方式二Python解包语法最优雅a,bb,a# 一行搞定方式二的底层原理等号右边 b, a 先构建一个元组 (20, 10)然后解包赋值给左边的 a, b。实际上还是创建了一个临时元组对象只是语法层面更简洁。五、类型系统技术分析五大基本类型逐一拆解5.1 type() vs isinstance()类型检测的双重武器Python定义变量时不写类型声明但不代表数据没类型。type() 可以随时查看num10print(type(num))# class intscore98.5print(type(score))# class floatnamePythonprint(type(name))# class stris_okTrueprint(type(is_ok))# class boolcolorNoneprint(type(color))# class NoneTypetype() 和 isinstance() 的选择score89.5# type() 精确匹配print(type(score)float)# Trueprint(type(score)int)# False# isinstance() 考虑继承关系print(isinstance(score,float))# Trueprint(isinstance(score,int))# False# bool是int的子类所以print(isinstance(True,int))# True这就是为什么True12经验法则一般场景用 isinstance()因为它尊重继承关系。需要严格类型匹对时用 type()。判断None用 x is None 而不是 x None。5.2 字符串类型深度剖析字符串是入门阶段用得最多的类型单独拿出来细讲。5.2.1 三种定义方式的适用场景# 单引号适合短字符串s1It is very interesting# 双引号适合字符串里包含单引号的情况s2Its very interesting# 不用转义单引号# 三引号适合多行文本保留内部格式s3尊敬的客户: 感谢您选择我们公司的产品。 我们将会为您竭诚的服务。 祝好 ~选择策略如果字符串里包含单引号外层就用双引号包含双引号外层就用单引号。两个都不是最优时用转义符。5.2.2 转义字符表# \ 单引号s1it\s a cat# 输出: its a cat# \ 双引号s2{\name\:\小王\}# 输出: {name:小王}# \n 换行s3床前明月光,\n疑是地上霜.# 输出:# 床前明月光,# 疑是地上霜.# \t 制表符Tabs4*\t*\t*\t*\t*\t*# 输出: * * * * * *5.2.3 字符串格式化的演进路线这是Python字符串处理中最实用的技能。从古至今有三种写法第一代%占位符老古董逐渐淘汰name小王age18major软件工程hobbyPython、Javagreeting大家好我是%s今年%s岁学习的专业是%s爱好%s%(name,age,major,hobby)print(greeting)缺点类型对应不灵活占位符多了眼花缭乱。第二代format()过渡方案greeting大家好我是{}今年{}岁学习的专业是{}爱好{}.format(name,age,major,hobby)print(greeting)比%好一些但还不够简洁。第三代f-string现代标准强烈推荐greetingf大家好我是{name}今年{age}岁学习的专业是{major}爱好{hobby}print(greeting)f-string不光能放变量还能放任何表达式print(f10 20 {1020})# 运算print(f名字长度:{len(name)})# 函数调用print(f年龄翻倍:{age*2})# 表达式5.3 类型转换机制Python提供了四个内置函数做类型转换每个都有明确的使用边界# str() - 任意类型转字符串print(str(100))# 100print(str(True))# Trueprint(str(None))# Noneprint(str([1,2,3]))# [1, 2, 3]# int() - 转整数字符串必须是纯数字print(int(20))# 20print(int(3.14))# 3直接截断不是四舍五入# print(int(abc)) # 报错# float() - 转浮点数print(float(90.5))# 90.5print(float(10))# 10.0# bool() - 转布尔值print(bool(1))# True非0就是Trueprint(bool(0))# Falseprint(bool(hello))# True非空字符串是Trueprint(bool())# False空字符串是Falseprint(bool(None))# False六、I/O交互层技术分析让程序从静态变动态前面写的代码数据都是写死的真正有用的程序得能和用户对话。这就需要I/O。6.1 input() 函数的底层行为nameinput(请输入您的姓名: )print(f欢迎您,{name})执行流程程序执行到 input() 时阻塞等待用户输入用户在控制台输入内容并按回车input() 将用户输入的内容以字符串形式返回程序继续往下执行最重要的坑input() 返回的永远是字符串即使用户输入 123它也是 “123” 而不是 123。6.2 print() 函数详解print() 不只用来打印有几个参数值得了解print(Hello,World,sep | )# sep: 多个值之间的分隔符默认空格print(Hello,end!!!)# end: 结尾字符默认换行6.3 类型转换 输入验证的技术模式# 输入年龄并计算ageint(input(请输入您的年龄: ))# input返回strint()转为整数print(f明年您就{age1}岁了)# 输入两个数字并计算xfloat(input(请输入x的值: ))yfloat(input(请输入y的值: ))print(fx y {xy})print(fx - y {x-y})注意浮点数精度问题输入 0.1 和 0.7x y 可能输出 0.7999999999999999。这不是你代码写错了是IEEE 754的固有限制。高精度场景如金融计算用 decimal 模块。6.4 完整实战ATM取款机技术实现现在把前面学的串起来写一个真正有交互的程序# ATM取款机完整实现 # 1. 数据存储用变量记录余额balance10000# 2. 输入验证密码passwordinput(请输入您的密码: )print(f密码验证通过:{password})# 3. 类型转换 输入取款金额moneyint(input(请输入您的取款金额: ))# 4. 数据运算计算新余额balancebalance-money# 5. 输出结果print(f恭喜您取款成功账户余额为:{balance})执行示例请输入您的密码: 123456 密码验证通过: 123456 请输入您的取款金额: 3000 恭喜您取款成功账户余额为: 7000这个程序麻雀虽小五脏俱全变量存储、用户输入、类型转换、算术运算、格式化输出——Day01的核心知识点全在里头了。七、运算引擎四种运算符技术详解7.1 算术运算符运算符含义示例结果备注加法10 313-减法10 - 37*乘法10 * 330/除法10 / 33.333…结果总是float//整除10 // 33向下取整丢弃小数%取余10 % 3110除以3的余数**幂指数10 ** 3100010的3次方num110num23print(num1num2)# 13print(num1-num2)# 7print(num1*num2)# 30print(num1/num2)# 3.3333333333333335print(num1//num2)# 3print(num1%num2)# 1print(num1**num2)# 1000关于 / vs /// 的结果始终是float即使能整除// 的结果是int当两个操作数都是int时直接向下取整不是四舍五入。7.2 赋值运算符num85num10# num 95 等价于 num num 10num-10# num 85 等价于 num num - 10num*10# num 850 等价于 num num * 10num//10# num 85 等价于 num num // 10num%3# num 1 等价于 num num % 3num**3# num 1 等价于 num num ** 3赋值运算符本质上是语法糖——让你用更少的字符表达同样的运算。除了 之外其他都是先运算再赋值两个动作的合并。7.3 比较运算符print(100100)# Trueprint(100100)# True两个字符串比较print(100!100)# Falseprint(100100)# Falseprint(100100)# Trueprint(100100)# Falseprint(100100)# True比较运算符返回bool值通常用在if条件判断里。Python的链式比较非常实用的语法特性# 判断数字是否在10到20之间nint(input(请输入一个整数: ))print(f{n}在10-20之间: ,10n20)# 等价于: n 10 and n 20这在大多数语言里是不支持的会变成 (10 n) 20 这种奇怪的东西Python专门做了优化。7.4 逻辑运算符与短路求值# and并且两边都为True结果才是Truenint(input(请输入一个整数: ))print(f{n}在10-20之间: ,n10andn20)# or或者只要有一边为True结果就是Truenint(input(请输入一个整数: ))print(f{n}不在10-20之间: ,n10orn20)短路求值是这个知识点的隐藏考点# and的短路左边是False右边根本不执行Falseandprint(这行不会打印)# or的短路左边是True右边根本不执行Trueorprint(这行也不会打印)实际应用用 or 给变量设置默认值用 and 做条件链式判断。这在写健壮的防御性代码时非常常用。And vs Or 的判断口诀and全部满足才过京东搜手机→价格在范围内并且是华为并且官方旗舰店or满足一个就够登录方式→扫码或者密码或者短信验证码八、Day07技术栈总结表回头看一下今天啃下来的东西模块核心内容关键技术点掌握度自检数据存储字面量六大类型int/float/str/bool/NoneType/容器□数据存储变量动态类型、内存模型、命名规范PEP8□数据存储数据类型type()/isinstance()、f-string格式化、类型转换□I/O交互input/printinput返回永远是str、类型转换输入验证□数据运算算术运算符 - * / // % **、浮点精度问题□数据运算赋值运算符 - * /语法糖□数据运算比较运算符 ! 、链式比较□数据运算逻辑运算符and/or/not、短路求值机制□两条主线八个模块。学一遍是不够的建议这样复习关掉文章独立敲一遍ATM取款机程序把每种运算符都自己在控制台里试一遍故意写错代码看报错信息——报错信息是最好的老师九、写在最后Day07作为Python学习的第一天内容确实不少。但你换个角度想今天学的东西后面每一天都会反复用到。变量你会天天定义f-string你会天天写运算符更不用说。所以今天花的时间本质上是在为后面每一天省时间。下一篇Day02进入流程控制——if条件分支和while/for循环。有了今天的底子流程控制学起来会轻松很多。毕竟判断条件用的就是比较运算符和逻辑运算符循环里操作数据用的就是变量和类型转换。学习编程没有捷径但可以有方法。看三遍不如敲一遍——这是我从无数个debug的深夜中总结出来的唯一真理。感谢阅览如果这篇笔记对你的Python学习有帮助顺手点个赞、收藏一下我更新下一期的时候你就能第一时间看到。有任何问题、建议、或者你也踩过的坑欢迎在评论区聊聊。学习路上一起进步。
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑