Python变量与数据类型
文章目录
- Python变量与数据类型
- 前言
- 一、认识Python变量
- 1.1 什么是变量?
- 1.2 Python的变量命名规则
- 1.3 推荐的命名风格
- 二、核心数据类型详解
- 2.1 数字类型(Numeric Types)
- 2.2 字符串类型(String)
- 2.3 布尔类型(Boolean)
- 2.4 None类型
- 三、Python的动态类型
- 3.1 变量可以随时改变类型
- 3.2 动态类型的优势与注意事项
- 四、类型转换
- 4.1 显式类型转换
- 4.2 类型转换的常见陷阱
- 4.3 实战:用户输入处理
- 五、实战练习:个人信息卡片
- 总结
- ✅ 亮点总结
- 适用场景
- 扩展方向
前言
编程的本质是对数据的处理,而变量和数据类型正是数据处理的基石。在上一篇文章中,我们搭建了Python环境并运行了第一个程序,今天我们将深入Python的数据世界,系统学习数字、字符串、布尔值等核心数据类型,理解Python动态类型的独特魅力,以及如何进行类型之间的灵活转换。很多初学者对Python"声明变量无需指定类型"感到新奇,但这既是Python灵活性的来源,也是新手容易踩坑的地方——动态类型带来的运行时错误往往比编译期错误更难排查。
本文不仅会讲解各数据类型的基础用法,还会重点分析动态类型的优势和陷阱、类型转换的常见坑点,以及在面试中经常被问到的"假值"判定规则。掌握这些基础知识后,你将能自如地使用Python存储和操作各种形式的数据,为后续流程控制和数据处理打下坚实基础。
一、认识Python变量
1.1 什么是变量?
变量可以理解为一个带标签的"容器",用来存储数据。在Python中,变量不需要提前声明类型,直接赋值即可使用:
name="Alice"# 字符串变量age=25# 整数变量height=1.68# 浮点数变量is_student=True# 布尔变量1.2 Python的变量命名规则
Python的变量命名需要遵循以下规则:
| 规则 | 正确示例 | 错误示例 |
|---|---|---|
| 只能包含字母、数字、下划线 | user_name、count2 | user-name、count! |
| 不能以数字开头 | name1、_data | 1name、2data |
| 不能使用保留字 | my_class | class、if、for |
| 区分大小写 | Name和name是不同的变量 | — |
Python的保留字可以通过以下方式查看:
importkeywordprint(keyword.kwlist)# 输出:['False', 'None', 'True', 'and', 'as', 'assert', 'async', ...不建议背保留字列表,但开发中遇到命名报错时,能快速意识到"这个词可能是保留字"并用keyword.kwlist验证即可。常见的"踩坑保留字"有class、type、list、dict、str、sum——这些词虽然在技术上可以覆盖(Python不强制阻止),但会覆盖内置函数导致难以排查的bug。
1.3 推荐的命名风格
Python社区遵循PEP 8命名规范:
# 变量和函数:小写字母+下划线(snake_case)user_name="Bob"total_count=100# 常量:全大写+下划线MAX_SIZE=1024PI=3.14159# 类名:大驼峰(PascalCase)classMyCustomClass:pass二、核心数据类型详解
Python内置的核心数据类型分为以下几类:
2.1 数字类型(Numeric Types)
Python支持三种数字类型:
# 整数(int)—— 任意精度,无需担心溢出a=42b=-10c=0xFF# 十六进制,值为255d=0b1010# 二进制,值为10# 浮点数(float)—— 双精度,约15位有效数字pi=3.14159sci=1.5e-3# 科学计数法,值为0.0015# 复数(complex)z=3+4jprint(z.real)# 3.0print(z.imag)# 4.0算术运算符:
print(10+3)# 13(加法)print(10-3)# 7(减法)print(10*3)# 30(乘法)print(10/3)# 3.333...(除法,始终返回float)print(10//3)# 3(整除/地板除)print(10%3)# 1(取余)print(10**3)# 1000(幂运算)2.2 字符串类型(String)
字符串是Python中最常用的数据类型之一,使用单引号或双引号定义:
s1='Hello's2="Python"s3='''这是一个 多行字符串'''s4="""也支持双引号的多行"""转义字符:
print("他说:\"你好!\"")# 双引号嵌套print("第一行\n第二行")# 换行print("列1\t列2\t列3")# 制表符Tabprint("C:\\Users\\Desktop")# 反斜杠自身使用原始字符串(raw string)可以忽略转义:
path=r"C:\Users\Desktop\new_folder"# 无需双写反斜杠print(path)# C:\Users\Desktop\new_folder2.3 布尔类型(Boolean)
布尔类型只有两个值:True和False(注意首字母大写):
is_active=Trueis_empty=False# 布尔运算print(TrueandFalse)# Falseprint(TrueorFalse)# Trueprint(notTrue)# False# 比较运算产生布尔值print(10>5)# Trueprint(10==5)# Falseprint(10!=5)# TruePython中,下列值被视为False(假值):
# 以下所有值在条件判断中都被视为Falseprint(bool(0))# Falseprint(bool(0.0))# Falseprint(bool(""))# False(空字符串)print(bool([]))# False(空列表)print(bool({}))# False(空字典)print(bool(None))# Falseprint(bool(set()))# False(空集合)其余值均被视为True。这一特性在条件判断中非常实用,可以写出while items:代替while len(items) > 0:,代码更简洁。面试中常考的一个点是:自己定义的类的实例,默认是True还是False?答案是True,除非该类实现了__bool__或__len__方法并返回False/0。
2.4 None类型
None是Python中的空值,表示"没有值"或"未知",常用于初始化和默认参数:
result=None# 表示还没有结果ifresultisNone:print("暂无数据")三、Python的动态类型
这是Python区别于Java、C++等静态类型语言的一个重要特性。
3.1 变量可以随时改变类型
x=100# x是int类型print(type(x))# <class 'int'>x="hello"# 同一个x现在变成了str类型print(type(x))# <class 'str'>x=[1,2,3]# x又变成了list类型print(type(x))# <class 'list'>3.2 动态类型的优势与注意事项
优势:代码简洁灵活,无需大量类型声明,开发效率高。
注意事项:动态类型也意味着类型错误要到运行时才能发现:
# 这种代码在静态语言中编译时就会报错,但Python要到运行时a=10b="二十"print(a+b)# TypeError: unsupported operand type(s) for +: 'int' and 'str'最佳实践:使用isinstance()进行运行时类型检查:
defadd(a,b):ifnotisinstance(a,(int,float))ornotisinstance(b,(int,float)):raiseTypeError("参数必须是数字类型")returna+bprint(add(10,20))# 30print(add(10,"20"))# TypeError: 参数必须是数字类型四、类型转换
Python提供了丰富的内置函数用于数据类型之间转换。
4.1 显式类型转换
# 转整数print(int(3.14))# 3print(int("42"))# 42print(int("1010",2))# 10(将二进制字符串转为十进制整数)# 转浮点数print(float(5))# 5.0print(float("3.14"))# 3.14# 转字符串print(str(100))# "100"print(str(True))# "True"print(str([1,2,3]))# "[1, 2, 3]"# 转布尔值print(bool(1))# Trueprint(bool(0))# Falseprint(bool("hello"))# Trueprint(bool(""))# False4.2 类型转换的常见陷阱
# int()不能转换带小数点的字符串# int("3.14") # ValueError!# 正确做法:先转float,再转intprint(int(float("3.14")))# 3# 空字符串转bool为Falseifnot"":print("空字符串被视为False")此外,浮点数转整数是直接截断而非四舍五入:int(3.9)的结果是3而不是4。如果需要四舍五入,应使用round(3.9)。而bool类型实际上是int的子类,True == 1和False == 0在Python中是成立的,这意味着True + True的结果是2——虽然这看起来有点奇怪,但在某些计数场景中确有用处。
4.3 实战:用户输入处理
用户输入始终是字符串类型,需要转换后才能进行数学运算:
# 简单计算器num1=input("请输入第一个数字:")num2=input("请输入第二个数字:")# 必须转换为数字类型result=float(num1)+float(num2)print(f"{num1}+{num2}={result}")五、实战练习:个人信息卡片
综合运用变量和数据类型,编写一个信息卡片程序:
defcreate_profile():"""创建个人信息卡片"""# 基本信息name=input("姓名:")age=int(input("年龄:"))height=float(input("身高(m):"))weight=float(input("体重(kg):"))# 计算BMIbmi=weight/(height**2)is_healthy=18.5<=bmi<=24.9# 学历信息(列表)education=["高中","本科","硕士","博士"]edu_index=int(input(f"最高学历{education}(0~3):"))highest_edu=education[edu_index]# 输出信息卡片print("\n"+"="*30)print(f" 个人信息卡片")print("="*30)print(f" 姓名:{name}")print(f" 年龄:{age}岁")print(f" 身高:{height}m")print(f" 体重:{weight}kg")print(f" BMI:{bmi:.1f}")print(f" 健康状况:{'良好'ifis_healthyelse'需要注意'}")print(f" 学历:{highest_edu}")print("="*30)if__name__=="__main__":create_profile()总结
本文我们系统学习了Python的变量与数据类型,核心要点回顾:
- 变量命名遵循蛇形命名法(snake_case),区分大小写,不能与保留字冲突
- 数字类型包括int、float、complex,整数具有任意精度
- 字符串用引号定义,支持转义字符和原始字符串(raw string)
- 布尔类型只有True和False,空值、0、空容器均被视为False
- None表示空值,常用于初始化和默认参数
- 动态类型让Python灵活高效,但也需要谨慎处理类型安全问题
- 类型转换使用int()、float()、str()、bool()等内置函数
变量和数据类型是编程世界的"基本粒子",理解它们是将复杂问题分解为可计算步骤的前提。下一篇文章我们将学习条件判断与循环,掌握程序的流程控制,让代码具备"决策"和"重复执行"的能力。
✅ 亮点总结
- 动态类型机制:Python无需声明变量类型,赋值即定义,灵活高效但需要谨防类型相关的运行时错误
- 数字类型全解析:int(任意精度整数)、float(浮点数)、complex(复数),以及二进制/八进制/十六进制表示
- 字符串与转义字符:单/双/三引号用法,\n、\t等转义序列,raw string忽略转义的场景
- 布尔与None类型:True/False的真值判定规则(空值、0、空容器均为False),None的初始化与默认参数用法
- 类型转换体系:int()、float()、str()、bool()等内置函数,理解隐式转换与显式转换的区别
适用场景
- 编写数据处理脚本时合理选择数据类型,避免类型不匹配导致的bug
- 解析API接口返回的JSON数据,正确进行类型转换和校验
- 读取配置文件/环境变量时确保数据类型正确(如端口号应为int而非str)
扩展方向
- 深入学习Python内存管理与对象引用机制,理解
id()和is运算符 - 掌握
typing模块的类型注解体系,配合 mypy 实现静态类型检查 - 推荐继续阅读下一篇:Python条件判断与循环,赋予程序"决策"能力