在讲解Python基本数据类型之前,先介绍一下Python中的注释、保留字和标识符这几个小点。
一、注释
在 Python 编程中,注释是提高代码可读性、可维护性的重要工具,它不会被解释器执行,但能让其他开发者(或未来的你)更快理解代码逻辑。
Python 提供两种注释方式:单行注释和多行注释。
1.1 单行注释
-
语法:以
#
开头,#
后的内容为注释。 -
示例:
# 这是一个单行注释 print("Hello, World!") # 输出欢迎信息
-
常见用途:
- 解释代码的功能或逻辑。
- 临时禁用某行代码(调试时常用)。
1.2 多行注释
Python 没有专门的多行注释语法,但可以通过以下方式实现类似效果:
-
方式一:连续使用
#
# 这是第一行注释 # 这是第二行注释 # 这是第三行注释
-
方式二:使用三引号(
'''
或"""
)
虽然三引号通常用于定义多行字符串,但未赋值给变量的三引号字符串会被视为注释。''' 这是一个多行注释 可以跨越多行 ''' print("Hello, World!")
-
常见用途:
- 解释复杂算法或函数的功能。
- 临时禁用多行代码。
1.3 总结
类型 | 语法 | 适用场景 |
---|---|---|
单行注释 | # 注释内容 | 简短说明、临时禁用单行代码 |
多行注释 | '''注释内容''' | 详细说明、临时禁用多行代码 |
文档字符串 | """文档内容""" | 函数/类/模块的官方说明 |
合理使用注释能让代码更易维护,但过度注释会适得其反。记住:代码是写给人看的,注释是写给看不懂代码的人看的。
二、保留字
- 保留字严格区分大小写
- python中总共35个保留字
三、标识符、变量与常量
标识符
变量名
栈堆分区,栈为钥匙,用来开堆这个箱子
常量名
# 例如
PI=3.14 #这是常量
pi=3.14 #这是变量
Python 是一种动态类型语言,变量在创建时无需显式声明类型,解释器会自动推断。但其数据类型丰富,了解它们对高效编程至关重要。以下是 Python 核心数据类型的详细解析:
四、基本数据类型
4.1 数值类型
-
整数(int)
表示整数,无大小限制(受内存限制)。age = 25 hex_num = 0xFF # 十六进制 bin_num = 0b101 # 二进制
-
浮点数(float)
表示实数,精度有限(双精度64位)。price = 99.99 scientific = 3e8 # 3 * 10^8
-
复数(complex)
由实部和虚部组成,虚部以j
结尾。c = 3 + 4j print(实数部分:',c.real) print(复数部分:',c.imag)
4.2 布尔型(bool)
表示逻辑值,仅有两个取值:True
和 False
。(这里提醒一下注意这两个布尔类型的首字母是大写的)
is_valid = True
4.3 字符串(str)
表示文本数据,支持Unicode。
name = "Alice"
multi_line = '''第一行
第二行'''
- 常用操作:
s = "hello" print(s[0]) # 索引访问: 'h' print(s[1:4]) # 切片: 'ell' print(s.upper())# 方法: 'HELLO' print('h' in s) #输出True print('q' in s) #输出False
一个制表位为8个字符,即一个\t等同于8个英文字母,等同于4个中文(一个汉字占两个字符)
字符串索引与切片操作:
s='helloworld'
print(s[0]) #输出为h
print(s[0:2]) #输出为hel
print(s[:2]) #默认从0开始
print(s[2:]) #默认切到结尾
4.4 容器类型
1. 列表(list)
有序、可变的元素集合,元素类型可不同。
numbers = [1, 2, 3]
mixed = ["a", 3.14, True]
- 常用操作:
lst = [1, 2, 3] lst.append(4) # 添加元素 lst[0] = 0 # 修改元素 del lst[1] # 删除元素
2. 元组(tuple)
有序、不可变的元素集合,常用于不可变数据。
point = (3, 4)
single_element = (5,) # 单元素元组需加逗号
3. 字典(dict)
键值对集合,键唯一且不可变。
person = {"name": "Bob", "age": 30}
- 常用操作:
d = {"a": 1, "b": 2} d["c"] = 3 # 添加键值对 del d["a"] # 删除键值对
4. 集合(set)
无序、唯一元素的集合,支持数学运算。
s = {1, 2, 3}
empty_set = set() # 空集合
- 常用操作:
a = {1, 2, 3} b = {3, 4, 5} print(a & b) # 交集: {3} print(a | b) # 并集: {1, 2, 3, 4, 5}
4.5 其他类型
1. 字节类型(bytes)
表示原始字节数据,不可变。
data = b"raw bytes"
2. 字节数组(bytearray)
可变的字节序列。
arr = bytearray(b"hello")
3. 空值(NoneType)
表示无值,与 False
、0 不同。
result = None
4.6 类型检查与转换
1. 检查类型
print(type(42)) # <class 'int'>
print(isinstance("text", str)) # True
2. 类型转换
x = int("123") # 字符串转整数
y = float("3.14") # 字符串转浮点数
z = str(100) # 数字转字符串
4.7 类型特性对比
类型 | 可变性 | 有序性 | 允许重复 | 典型用途 |
---|---|---|---|---|
int | ❌ | ❌ | ❌ | 数值计算 |
str | ❌ | ✅ | ✅ | 文本处理 |
list | ✅ | ✅ | ✅ | 动态集合 |
tuple | ❌ | ✅ | ✅ | 不可变数据结构 |
dict | ✅ | ❌ | ❌ | 键值映射 |
set | ✅ | ❌ | ❌ | 唯一元素集合 |
4.8 动态类型特性
Python 变量类型在运行时确定,且可重新绑定:
x = 42 # int 类型
x = "hello" # 现在变为 str 类型
4.9 最佳实践
- 显式类型转换:避免隐式类型错误(如
"5" + 3
会报错)。 - 利用类型提示(Python 3.5+):
def add(a: int, b: int) -> int: return a + b
- 选择合适类型:
- 需要快速查找 ➔ 字典
- 需要唯一元素 ➔ 集合
- 需要有序不可变 ➔ 元组
掌握这些数据类型是编写高效 Python 代码的基础,合理选择类型能显著提升程序性能和可读性。
五、列表与元组、字典与集合的区别和异同梳理
笔者在第一次学习到这里的时候也会对列表与元组,字典和集合之间的异同或关联性感到混淆混乱,所以笔者在这里再梳理一下他们之间关系便于列位进一步理解和把握。
在 Python 中,列表(list)与元组(tuple)、字典(dict)与集合(set)是四组核心数据结构,它们在设计和用途上有显著差异。
5.1 列表(List) vs 元组(Tuple)
1. 核心特性对比
特性 | 列表(List) | 元组(Tuple) |
---|---|---|
可变性 | 可变(Mutable) | 不可变(Immutable) |
语法 | 方括号 [] | 圆括号 () |
性能 | 内存占用稍高(支持动态扩容) | 内存更紧凑(不可变性优化) |
适用场景 | 频繁修改的动态集合 | 不可变数据、固定配置、函数返回多值 |
2. 底层实现差异
- 列表:动态数组,预留额外空间以支持频繁的添加/删除操作。
- 元组:静态数组,内存连续且紧凑,不可变性允许更多优化(如缓存哈希值)。
3. 关键操作对比
操作 | 列表(List) | 元组(Tuple) |
---|---|---|
添加元素 | append() , extend() , insert() | 不支持 |
删除元素 | remove() , pop() , del | 不支持 |
修改元素 | 直接通过索引赋值 | 不支持 |
切片 | 返回新列表 | 返回新元组 |
4. 使用场景建议
- 列表:日志记录、动态配置、需要频繁增删改的场景。
- 元组:坐标点、数据库查询结果、函数返回多值(如
return x, y
)。
5.2 字典(Dict) vs 集合(Set)
1. 核心特性对比
特性 | 字典(Dict) | 集合(Set) |
---|---|---|
数据结构 | 键值对(Key-Value) | 唯一元素集合 |
键的要求 | 键必须不可变(如 int , str , tuple ) | 元素必须不可变 |
查找速度 | O(1)(平均情况,哈希表实现) | O(1)(平均情况,哈希表实现) |
有序性 | Python 3.7+ 默认有序 | 无序 |
2. 底层实现差异
- 字典:哈希表,存储
<key, value>
对,通过哈希函数快速定位键。 - 集合:哈希表,仅存储唯一元素,自动去重。
3. 关键操作对比
操作 | 字典(Dict) | 集合(Set) |
---|---|---|
添加元素 | dict[key] = value | add() , update() |
删除元素 | pop() , del dict[key] | remove() , discard() , pop() |
合并操作 | update() | union() , ` |
交集/差集 | 不直接支持 | intersection() , & / difference() , - |
4. 使用场景建议
- 字典:配置映射、缓存、计数器(如
collections.defaultdict
)。 - 集合:去重、成员检测、集合运算(如
{1,2,3} & {2,3,4}
)。
5.3 综合对比总结
维度 | 列表 vs 元组 | 字典 vs 集合 |
---|---|---|
可变性 | 列表可变,元组不可变 | 字典和集合均支持动态增删 |
数据结构 | 顺序序列 | 字典为键值对,集合为唯一元素 |
核心用途 | 存储有序元素集合 | 字典用于映射,集合用于唯一性 |
性能特点 | 列表增删可能触发扩容 | 哈希表操作平均 O(1) |
典型场景 | 动态数据(如日志) | 映射关系(如配置)或去重(如用户ID) |
5.4 进阶特性
-
命名元组(Named Tuple)
增强元组可读性:from collections import namedtuple Point = namedtuple("Point", ["x", "y"]) p = Point(3, 4) print(p.x) # 3
-
字典视图对象
字典的键、值、项视图支持集合操作:d = {"a": 1, "b": 2} print(d.keys() & {"a", "c"}) # {'a'}
-
集合推导式
快速生成集合:squares = {x**2 for x in [1, 2, 2, 3]} # {1, 4, 9}
5.5 选择建议
- 需要有序且可变 ➔ 列表
- 需要不可变序列 ➔ 元组
- 需要键值映射 ➔ 字典
- 需要唯一元素集合 ➔ 集合