【Python零基础入门】第4篇:Python变量与数据类型详解

↵ ↵

🎯 学习目标

深入理解Python变量的本质,掌握各种数据类型的特点、使用场景和相互转换方法,为后续编程打下坚实基础!


📖 导语

在前面的学习中,我们已经知道了什么是变量,也了解了Python的基本数据类型。但是,你是否真的理解变量在内存中是如何存储的?不同的数据类型有什么本质区别?什么时候该用什么类型?

这一篇我们将深入底层,带你彻底搞懂Python的变量和数据类型!


一、深入理解变量

1.1 变量是什么?

在Python中,变量不是盒子,而是标签

很多人把变量想象成一个盒子,里面装着数据。但在Python中,更准确的比喻是:变量是一个贴在对象上的标签

1.2 变量的内存模型

让我们通过图示来理解:

代码 内存中的实际情况
a = 10 创建一个整数对象10,变量a指向它
b = a 变量b也指向同一个整数对象10
a = 20 创建新整数对象20,a改指向它,b仍指向10

代码验证:

a = 10

b = a

print(id(a)) # 查看a的内存地址

print(id(b)) # 查看b的内存地址,发现和a相同!

a = 20

print(id(a)) # 地址变了,因为指向了新对象

print(id(b)) # b的地址不变,仍指向10

二、Python数据类型

2.1 数据类型分类

Python的数据类型可以分为两大类:

分类 特点 示例
不可变类型 创建后不能被修改 int, float, str, tuple
可变类型 创建后可以修改 list, dict, set

2.2 不可变类型详解

整数类型 int

Python的整数可以表示任意大的数,不受位数限制!

代码示例:big_num = 12345678901234567890

print(big_num) # 完全没问题

浮点数类型 float

⚠️ 注意精度问题:print(0.1 + 0.2) 输出 0.30000000000000004

解决方案:使用decimal模块

字符串类型 str

字符串是不可变的字符序列。

重要特性:不可变性、驻留机制、Unicode编码

布尔类型 bool

布尔类型只有两个值:True 和 False

本质:True是1,False是0

三、数据类型转换

3.1 隐式转换

Python会在必要时自动进行类型转换:

整数和浮点数运算,整数转为浮点数

result = 10 + 3.5 # result是13.5,float类型

布尔值在运算中转为整数

result = True + 5 # result是6,int类型

3.2 显式转换

使用类型函数进行强制转换:

函数 作用 示例
int() 转为整数 int(3.14) → 3
float() 转为浮点数 float(5) → 5.0
str() 转为字符串 str(100) → "100"
bool() 转为布尔值 bool(1) → True
list() 转为列表 list("abc") → ["a","b","c"]
tuple() 转为元组 tuple([1,2,3]) → (1,2,3)

3.3 转换注意事项

  1. int()转换会直接截断小数部分,不是四舍五入

print(int(3.9)) # 输出 3,不是 4!

  1. 字符串转数字时,内容必须是有效数字

print(int("123")) # 正常,输出 123

print(int("abc")) # 报错!ValueError

  1. 空字符串转bool为False,非空为True

print(bool("")) # False

print(bool("hello")) # True

四、变量命名规范

4.1 PEP 8命名规范

Python官方推荐的命名风格:

类型 命名规范 示例
变量名 小写字母,下划线分隔 user_name, total_count
常量名 全大写字母,下划线分隔 MAX_SIZE, PI
函数名 小写字母,下划线分隔 get_name(), calculate()
类名 首字母大写的驼峰式 UserInfo, MyClass
私有变量 以下划线开头 _private_var

4.2 好的命名实践

✅ 好的命名:

  • user_name(见名知意)

  • total_score(清晰明确)

  • is_valid(布尔值用is开头)

❌ 不好的命名:

  • x(无意义)

  • n(缩写不清晰)

  • data1(过于笼统)

五、实战案例

5.1 学生成绩管理系统(简化版)

综合运用变量和数据类型的知识:

学生信息

student_name = "张三"

student_age = 18

math_score = 85.5

english_score = 92.0

is_passed = True

计算总成绩和平均分

total_score = math_score + english_score

average_score = total_score / 2

输出结果

print("学生姓名:", student_name)

print("数学成绩:", math_score)

print("英语成绩:", english_score)

print("总成绩:", total_score)

print("平均分:", average_score)

print("是否及格:", is_passed)

5.2 数据类型判断函数

编写一个函数,判断并显示变量的类型信息:

def show_type_info(var):

print("值:", var)

print("类型:", type(var).name)

print("内存地址:", id(var))

print("-" * 30)

测试各种数据类型

show_type_info(100) # int

show_type_info(3.14) # float

show_type_info("hello") # str

show_type_info([1,2,3]) # list

show_type_info({"a":1}) # dict

六、常见陷阱与最佳实践

6.1 浮点数比较陷阱

❌ 错误做法:

if 0.1 + 0.2 == 0.3:

print("相等") # 不会执行!

✅ 正确做法:

import math

if math.isclose(0.1 + 0.2, 0.3):

print("相等") # 正常执行

6.2 可变对象的默认参数陷阱

❌ 错误做法:

def add_item(item, items=[]):

items.append(item)

return items

print(add_item(1)) # [1]

print(add_item(2)) # [1, 2] 出乎意料!

✅ 正确做法:

def add_item(item, items=None):

if items is None:

items = []

items.append(item)

return items

6.3 字符串拼接的最佳实践

❌ 低效做法(大量字符串时):

result = ""

for i in range(1000):

result += str(i) # 每次都要创建新字符串

✅ 高效做法:

parts = []

for i in range(1000):

parts.append(str(i))

result = "".join(parts) # 只创建一次

或者使用生成器

result = "".join(str(i) for i in range(1000))

七、小结

今天我们深入学习了:

变量的本质:变量是对象的引用(标签),不是盒子

数据类型分类:可变类型 vs 不可变类型

各类型的特点:int、float、str、bool的深入理解

类型转换:隐式转换和显式转换

命名规范:PEP 8命名规范

实战案例:学生成绩管理系统

常见陷阱:浮点数比较、可变默认参数、字符串拼接

八、课后练习

练习1:类型判断

写出以下表达式的结果类型:

  1. 10 / 3

  2. 10 // 3

  3. 10 + 3.0

  4. "10" + "3"

  5. True + 1

练习2:类型转换

将以下字符串转换为合适的数据类型并进行计算:

data = "100,85.5,92.0,78.5"

要求:提取出4个数字,计算它们的平均值

练习3:变量交换

已知 a = 10, b = 20,请用多种方法交换a和b的值:

方法1:使用临时变量

方法2:不使用临时变量(数学方法)

方法3:Python特有方式(一行代码)

练习4:程序纠错

下面的代码有错误,请找出并修正:

name = "张三"

age = "18"

score = 85.5

total = age + score # 错误在这里

print(name + "的年龄是" + age + ",总分是" + total)

练习5:设计题

设计一个简单的银行账户系统,包含:

  • 账户名(字符串)

  • 账户余额(浮点数)

  • 是否激活(布尔值)

  • 交易记录(列表)

编写代码初始化一个账户,并进行存款、取款操作。

九、下篇预告

第5篇:《Python数字类型:整数、浮点数与运算》

我们将深入学习:

  • Python数字类型的底层实现

  • 各种运算符的使用

  • math模块和random模块

  • 数字格式化输出

  • 进制转换

敬请期待!


📌 系列文章目录:点击关注,持续更新中...


如果觉得有帮助,请点赞 👍 + 收藏 ⭐ + 关注 ❤️

你的支持是我持续创作的动力!


本文为本系列第4篇,带你从零基础到Python实战!

相关推荐
阿正的梦工坊36 分钟前
深入理解 PyTorch 中的 unsqueeze 操作
人工智能·pytorch·python
FreakStudio1 小时前
硬件版【Cursor】?aily blockly IDE尝鲜封神,实战硬伤尽显
python·单片机·嵌入式·大学生·面向对象·并行计算·电子diy·电子计算机
郝学胜-神的一滴3 小时前
Qt 入门 01-01:从零基础到商业级客户端实战
开发语言·c++·qt·程序人生·软件构建
测试员周周3 小时前
【Appium 系列】第06节-页面对象实现 — LoginPage 实战
开发语言·前端·人工智能·python·功能测试·appium·测试用例
摇滚侠3 小时前
@Autowired 和 @Resource 的区别
java·开发语言
2301_783848653 小时前
优化文本分类中堆叠模型的网格搜索性能:避免训练卡顿的实战指南
jvm·数据库·python
Wy_编程3 小时前
go语言中的结构体
开发语言·后端·golang
SeaTunnel4 小时前
(八)收官篇 | 数据平台最后一公里:数据集成开发设计与上线治理实战
java·大数据·开发语言·白鲸开源
CLX05054 小时前
如何安装Oracle 12c Cloud Control_OMS服务端组件与Agent部署
jvm·数据库·python
大卡片4 小时前
C++的基础知识点
开发语言·c++