变量和简单数据类型
一、变量1.1 变量的定义与使用messageHello Python world!print(message)messageHello Python Crash Course world!print(message)输出Hello Python world! Hello Python Crash Course world!1.2 变量命名规则# ✅ 有效的变量名messageHellomessage_1Hello_messageHello# ❌ 无效的变量名会报错1_messageHello# 不能以数字开头message-1Hello# 不能包含连字符greeting messageHello# 不能包含空格命名规则总结只能包含字母、数字和下划线不能以数字开头不能包含空格不能使用Python关键字区分大小写1.3 Python关键字不能用作变量名False,None,True,and,as,assert,break,class,continue,def,del,elif,else,except,finally,for,from,global,if,import,in,is,lambda,nonlocal,not,or,pass,raise,return,try,while,with,yield1.4 与Java变量对比Java变量是容器类型固定基本类型存值、对象存引用Python变量是标签类型动态一切皆对象、一切皆引用1.4.1 变量本质最核心差异Java变量是固定类型的内存盒子变量本身有类型盒子里存数据值基本类型或者对象引用地址引用类型。声明时必须指定类型变量类型终身固定不能再存别的类型。// Javainta10;// a 是int类型盒子只能放整数Stringshi;// s存对象的地址Python变量是标签 / 名字贴在对象上对象才有类型变量本身没有类型。a10ahello# 合法把标签a撕下来贴到字符串对象上a只是名字没有类型真正有类型的是右边的对象10、hello。同一个变量名可以反复绑定不同类型对象。1.4.2 声明与赋值Java显式类型声明先声明再赋值声明必须写类型局部变量不会自动初始化不赋值不能使用。// 基本类型intage25;doubleprice19.99;booleanisActivetrue;chargradeA;// 引用类型StringnameAlice;ListStringlistnewArrayList();MapString,ObjectmapnewHashMap();// 变量类型一旦声明不能改变intx10;xhello;// ❌ 编译错误不兼容的类型Python无类型声明没有单独声明步骤赋值即创建变量没有变量预先声明语法# 无需声明类型直接赋值age25price19.99is_activeTruegradeAnameAlicemy_list[]my_dict{}# 变量可以重新指向不同类型x10xhello# ✅ 完全合法x[1,2,3]# ✅ 完全合法1.4.3 赋值语义差异Java基本数据类型int,double,boolean…值拷贝引用类型类、数组拷贝引用地址两个变量指向同一个对象// 1. 基本类型赋值值复制inta10;intba;// b 10复制值b20;System.out.println(a);// 10// 2. 对象类型赋值引用复制ListStringlist1newArrayList();list1.add(A);ListStringlist2list1;// list2 获得 list1 的引用list2.add(B);System.out.println(list1);// [A, B]list1 也被修改// 3. 字符串赋值不可变对象Strings1hello;Strings2s1;// s2 获得 s1 的引用s2s2 world;// 创建新对象s1 不受影响System.out.println(s1);// helloPython一切皆对象没有原生基本类型所有赋值都是引用赋值。不可变对象重新赋值不是修改对象是更换标签绑定。# 1. 不可变对象int, float, str, tuplea10ba# b 指向 a 指向的对象 10b20# b 指向新对象 20a 不受影响print(a)# 10# 2. 可变对象list, dict, setlist1[1,2,3]list2list1# list2 指向 list1 指向的同一个列表list2.append(4)print(list1)# [1, 2, 3, 4]# 3. 字符串不可变s1hellos2s1# s2 指向 s1 指向的字符串对象s2 world# 创建新字符串对象s1 不受影响print(s1)# hello1.4.4 常量Javafinal修饰变量引用不可修改// final 变量只能赋值一次finalintMAX_SIZE100;// MAX_SIZE 200; // ❌ 编译错误// final 引用引用不能变但对象内容可以变finalListStringlistnewArrayList();list.add(A);// ✅ 可以修改对象内容// list new ArrayList(); // ❌ 编译错误// 真正不可变使用不可变类finalStringshello;// s s world; // ❌ 编译错误String 不可变Python约定 机制# Python 没有真正的常量机制# 约定全大写表示常量MAX_SIZE100# 仍然可以修改只是约定MAX_SIZE200# ✅ 不会报错# 模拟不可变性使用元组defget_config():return(host,localhost,port,8080)# 返回元组# 使用 property 实现只读属性classCircle:def__init__(self,radius):self._radiusradiuspropertydefradius(self):returnself._radiuspropertydefarea(self):return3.14*self._radius**2cCircle(5)print(c.radius)# 5print(c.area)# 78.5# c.radius 10 # ❌ AttributeError: cant set attribute冻结对象frozenset, tuple# frozenset不可变集合sfrozenset([1,2,3])# s.add(4) # ❌ AttributeError# tuple不可变列表t(1,2,3)# t[0] 10 # ❌ TypeError# 注意tuple中的可变元素仍可修改t([1,2],3)t[0].append(4)# ✅ 可以修改print(t)# ([1, 2, 4], 3)1.4.5 多变量赋值Javainta,b,c;abc10;// 支持链式赋值Python# 链式赋值abc10# 序列解包Java没有x,y10,20x,yy,x# 交换变量不需要临时变量1.4.6 类型系统差异Java静态类型系统强制转换变量类型不变// 编译时类型检查Stringshello;inti10;// 类型转换需要显式进行Objectobjhello;Stringstr(String)obj;// 需要强制类型转换// 自动装箱/拆箱Integerboxed10;// 自动装箱intunboxedboxed;// 自动拆箱Python动态类型系统转换产生新对象变量本身类型不受限制# 运行时类型检查shelloi10# 无需类型转换直接重新赋值objhellostr_valobj# 无需转换直接引用# 没有基本类型和包装类型的区分# Python中 int 就是对象没有 int vs Integer 的区别x10# x 是 int 对象print(type(x))# class int1.4.7 变量作用域Java块级作用域{ }就会产生新作用域{intx10;}// x 外面不可见Python没有块级作用域if/for/while 不会新建作用域只有函数、类、模块作用域foriinrange(3):num100print(num)# 可以访问for的块不隔离变量1.4.8 内存模型对比Java 特点基本类型int, double, boolean等值直接存储在栈中对象类型String, List等引用存储在栈中对象存储在堆中赋值给另一个变量时基本类型复制值对象类型复制引用// Javainta10;intba;// b 获得 a 的值副本b20;System.out.println(a);// 10a 不受影响Strings1hello;Strings2s1;// s2 获得 s1 的引用副本// s1 和 s2 指向同一个字符串对象// 但 String 是不可变的所以修改 s2 不会影响 s1Python 特点没有基本类型所有数据都是对象存储在堆中变量只是名字/标签指向堆中的对象赋值操作只是让变量指向新的对象类似Java的对象引用赋值使用引用计数进行内存管理# Pythona10ba# b 指向 a 指向的同一个对象b20# b 现在指向新的对象 20print(a)# 10a 仍然指向 10# 但注意对于可变对象list1[1,2,3]list2list1# list2 指向 list1 指向的同一个列表对象list2.append(4)print(list1)# [1, 2, 3, 4]list1 也被修改了1.5 可变对象 vs 不可变对象1.5.1 与Java对比类型JavaPython不可变String, Integer, Double包装类int, str, tuple, float, bool可变ArrayList, HashMap, StringBuilderlist, dict, set特点基本类型值传递对象引用传递一切皆引用可变性决定行为1.5.2 可变对象# 可变对象创建后可以修改# list, dict, set# 示例1列表lst[1,2,3]print(id(lst))# 4389562048lst.append(4)# 原地修改print(id(lst))# 4389562048相同地址# 示例2字典d{a:1}print(id(d))# 4389562048d[b]2# 原地修改print(id(d))# 4389562048相同地址# 示例3集合s{1,2,3}print(id(s))# 4389562048s.add(4)# 原地修改print(id(s))# 4389562048相同地址1.5.3 不可变对象# 不可变对象创建后不能被修改# int, float, bool, str, tuple, frozenset# 示例1整数x10print(id(x))# 140735892123456x1# x 指向新的对象 11print(id(x))# 140735892123488不同地址# 示例2字符串shelloprint(id(s))# 4389562048s world# 创建新字符串print(id(s))# 4389563088不同地址# 示例3元组t(1,2,3)# t[0] 10 # ❌ TypeError: tuple object does not support item assignment1.6 深拷贝与浅拷贝1.6.1 与Java对比操作JavaPython引用赋值List b a;b a浅拷贝new ArrayList(a)a[:] 或 a.copy()深拷贝手动递归或使用序列化copy.deepcopy(a)1.6.2 深拷贝Deep Copy深拷贝特点完全独立不影响原始对象importcopy original[1,2,[3,4]]deepcopy.deepcopy(original)deep[0]100deep[2][0]300print(original)# [1, 2, [3, 4]]print(deep)# [100, 2, [300, 4]]1.6.3 浅拷贝Shallow Copy浅拷贝特点创建新对象但只复制最外层嵌套对象仍然是引用importcopy# 方式1切片shallow1original[:]# 方式2list()构造函数shallow2list(original)# 方式3copy模块shallow3copy.copy(original)original[1,2,[3,4]]shalloworiginal.copy()# 或 original[:]shallow[0]100# 不影响 originalshallow[2][0]300# 影响 original因为嵌套列表是引用print(original)# [1, 2, [300, 4]]print(shallow)# [100, 2, [300, 4]]二、字符串2.1 字符串的定义方式# 单引号nameAlice# 双引号nameAlice# 三引号多行字符串messageThis is a multi-line string.# 包含引号的字符串descriptionHe said, Python is awesome!descriptionIts a beautiful day.2.2 字符串常用方法text Hello, Python World! # 大小写转换print(text.upper())# HELLO, PYTHON WORLD! print(text.lower())# hello, python world! print(text.title())# Hello, Python World! print(text.capitalize())# hello, python world! print(text.swapcase())# hELLO, pYTHON wORLD! # 去除空白print(text.strip())# Hello, Python World!print(text.lstrip())# Hello, Python World! print(text.rstrip())# Hello, Python World!# 查找与替换print(text.find(Python))# 9索引位置print(text.index(Python))# 9索引位置找不到会报错print(text.replace(Python,Java))# Hello, Java World! print(text.count(o))# 3出现次数# 分割与连接wordstext.split()# [Hello,, Python, World!]joined-.join(words)# Hello,-Python-World!# 判断print(text.startswith( Hello))# Trueprint(text.endswith(! ))# Trueprint(123.isdigit())# Trueprint(abc.isalpha())# Trueprint(abc123.isalnum())# Trueprint( .isspace())# True2.3 f-string格式化first_nameadalast_namelovelacefull_namef{first_name}{last_name}print(fHello,{full_name.title()}!)# 输出Hello, Ada Lovelace!# 格式化数字pi3.1415926print(fPi {pi:.2f})# Pi 3.14print(fPi {pi:.4f})# Pi 3.1416# 对齐和填充print(f{left:10})# left print(f{right:10})# rightprint(f{center:^10})# center print(f{center:*^10})# *center***# 千分位分隔符number1234567print(f{number:,})# 1,234,567旧式格式化方法nameAliceage25# format()方法print(My name is {} and I am {} years old..format(name,age))# 位置参数print(My name is {0} and I am {1} years old..format(name,age))# 关键字参数print(My name is {n} and I am {a} years old..format(nname,aage))# %格式化最古老print(My name is %s and I am %d years old.%(name,age))三、数字3.1 整数# 整数运算23# 53-2# 12*3# 63/2# 1.5Python 3中/总是返回浮点数3//2# 1整除类似Java的/3%2# 1取余2**3# 8乘方10**6# 10000003.2 浮点数0.10.2# 0.30000000000000004浮点数精度问题# 处理精度问题fromdecimalimportDecimal,getcontext getcontext().prec6resultDecimal(0.1)Decimal(0.2)print(result)# 0.33.3 类型转换# 字符串转数字ageint(25)pricefloat(19.99)# 数字转字符串str_agestr(25)str_pricestr(19.99)# 浮点数转整数截断小数int(3.7)# 3int(-3.7)# -3# 四舍五入round(3.7)# 4round(3.2)# 3round(3.14159,2)# 3.14

相关新闻

Java嵌入式块级文件系统实现与硬件适配

Java嵌入式块级文件系统实现与硬件适配

简介:这是一份面向计算机专业学生与Java初学者的文件与块管理实践项目,聚焦底层存储逻辑实现,帮助理解操作系统中文件系统与数据块管理的核心机制。资源包含156个文件,以22个Java源码文件和22个Class编译文件为主体,辅…

2026/9/15 14:39:00 阅读更多 →
十层电梯PLC控制系统设计与实现

十层电梯PLC控制系统设计与实现

1. 项目概述:十层电梯PLC控制系统的核心价值十层电梯控制系统是工业自动化领域的典型应用场景,采用西门子S7-1200 PLC作为核心控制器,通过梯形图编程实现逻辑控制,配合组态画面完成人机交互。这个系统相比传统继电器控制方案&…

2026/9/15 22:17:23 阅读更多 →
RK开发板Windows识别失败的四层排查法

RK开发板Windows识别失败的四层排查法

1. 项目概述:RK开发板连Windows失联,不是“驱动没装”那么简单我第一次遇到RK3399开发板插上Windows电脑后设备管理器里连个“未知设备”都不显示时,下意识就去官网下了瑞芯微的USB驱动包,双击安装、重启、重插——结果还是一片空…

2026/9/21 15:04:05 阅读更多 →

最新新闻

地球在线高清卫星地图API升级避坑速查手册

地球在线高清卫星地图API升级避坑速查手册

地球在线高清卫星地图API升级避坑速查手册 版本升级后 API 全变了,以前能跑的代码现在全报 404,抓头发也没用。别慌,这份 速查手册 专治各种“API 迁移疑难杂症”,帮你把地球在线高清卫星地图的底层逻辑吃透。 很多开发老哥在对接…

2026/9/22 4:27:53 阅读更多 →
activator下载面试突击:3个核心考点与完整示例

activator下载面试突击:3个核心考点与完整示例

activator下载面试突击:3个核心考点与完整示例 面试现场,当面试官甩出“activator下载”这个看似简单却极易踩坑的问题时,你是不是瞬间大脑空白,答不上来底层原理?别慌,这正是大多数转岗开发者的痛点。很多新人以为这只是个简单的工…

2026/9/22 4:27:53 阅读更多 →
UE是什么?3个步骤搞懂Unreal Engine与性能优化

UE是什么?3个步骤搞懂Unreal Engine与性能优化

UE是什么?3个步骤搞懂Unreal Engine与性能优化 刚接手一个跨平台项目,同事甩来一段 C++ 蓝图混合代码,运行直接闪退。报错日志里全是 UObject…

2026/9/22 4:27:53 阅读更多 →
3步搞定mfunz环境配置,一文搞懂从零到跑通

3步搞定mfunz环境配置,一文搞懂从零到跑通

3步搞定mfunz环境配置,一文搞懂从零到跑通 配置环境就卡半天,是不是你的常态?下载依赖报错、版本冲突、路径找不到,搞一下午还没跑起来第一行代码。今天这篇教程,就是为了解决这个问题。我们不只讲怎么装,更要讲 为什么这么装 ,让你彻底…

2026/9/22 4:27:53 阅读更多 →
印章系统入门到精通:源码拆解解决配置卡壳痛点

印章系统入门到精通:源码拆解解决配置卡壳痛点

印章系统入门到精通:源码拆解解决配置卡壳痛点 配置环境就卡半天,这大概是无数开发者接手“印章系统”时的第一反应。明明照着文档一步步来,依赖装好了,端口也通了,结果一启动就报空指针或者图片渲染空白。别急,这种痛苦我见得太多了。今天这篇《印章系…

2026/9/22 4:27:53 阅读更多 →
3分钟看懂管理员工源码 一文搞懂权限核心逻辑

3分钟看懂管理员工源码 一文搞懂权限核心逻辑

3分钟看懂管理员工源码 一文搞懂权限核心逻辑 官方文档动辄几百页,翻来覆去还是抓不住“管理员工”这块硬骨头的重点?别急,今天咱们不念经,直接撕开源码包装纸,用 一文搞懂…

2026/9/22 4:26:52 阅读更多 →

日新闻

3台商务办公笔记本实测:手写实现环境配置,告别卡半天

3台商务办公笔记本实测:手写实现环境配置,告别卡半天

3台商务办公笔记本实测:手写实现环境配置,告别卡半天 配置环境就卡半天?别怪机器慢,多半是你没选对工具链。在Java、Go或Python的项目现场, 手写实现…

2026/9/22 0:00:41 阅读更多 →
剑帝加点速查手册:3分钟搞懂核心逻辑

剑帝加点速查手册:3分钟搞懂核心逻辑

剑帝加点速查手册:3分钟搞懂核心逻辑 面试被问原理答不上来,是不是常态?别慌。很多开发者对着 GitHub 开源仓库里的代码发呆,看似简单实则暗藏玄机。今天这份【剑帝加点】速查手册,直接带你拆解核心实现,把面试必考的原理讲透。…

2026/9/22 0:00:41 阅读更多 →
手写实现图片压缩网站核心:搞定WebP转换与质量调优

手写实现图片压缩网站核心:搞定WebP转换与质量调优

手写实现图片压缩网站核心:搞定WebP转换与质量调优 复制来的代码跑不通不知道怎么调?别慌,这种“复制粘贴地狱”在开发圈太常见了。尤其是做 图片压缩网站…

2026/9/22 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/21 3:13:20 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/21 2:19:36 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/21 4:51:05 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/21 15:36:51 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/21 15:36:51 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/22 2:43:42 阅读更多 →