Python 基础详解:数据类型(Data Types)—— 程序的“数据基石”

一、引言:为什么数据类型如此重要?

在 Python 编程中,数据类型决定了:

  • 数据的存储方式
  • 可以对数据执行的操作
  • 数据的取值范围
  • 不同类型之间的运算规则

理解数据类型是编写正确、高效程序的基础。Python 是动态类型语言,虽然你不需要显式声明类型,但必须清楚每个变量的类型及其行为。


二、Python 内置核心数据类型概览

Python 提供了丰富的内置数据类型,主要分为以下几类:

|-----------|----------------------------------|----------|
| 类别 | 数据类型 | 说明 |
| 数字类型 | int, float, complex | 数值计算 |
| 文本类型 | str | 字符串处理 |
| 布尔类型 | bool | 逻辑判断 |
| 序列类型 | list, tuple, range | 有序数据集合 |
| 映射类型 | dict | 键值对存储 |
| 集合类型 | set, frozenset | 无序唯一元素集合 |
| 二进制类型 | bytes,bytearray,memoryview | 二进制数据处理 |

💡 本文将重点讲解最常用的核心类型。


三、数字类型(Numeric Types)

1. 整数(int)

表示整数值,没有大小限制(仅受内存限制)。

复制代码
age = 25
temperature = -10
big_number = 123456789012345678901234567890
常用操作:
复制代码
a = 10
b = 3

print(a + b)   # 13  加法
print(a - b)   # 7   减法
print(a * b)   # 30  乘法
print(a / b)   # 3.333...  除法(结果为 float)
print(a // b)  # 3   整除
print(a % b)   # 1   取余
print(a ** b)  # 1000  幂运算

⚠️ 注意:/ 运算符总是返回浮点数 ,即使结果是整数(如 4 / 2 返回 2.0)。


2. 浮点数(float)

表示带小数点的数字,遵循 IEEE 754 标准。

复制代码
price = 19.99
pi = 3.1415926535
scientific = 1.5e-4  # 科学计数法,等于 0.00015
浮点数精度问题:
复制代码
print(0.1 + 0.2)  # 输出:0.30000000000000004
print(0.1 + 0.2 == 0.3)  # False!

解决方案 :使用 decimal 模块进行高精度计算(如金融计算):

复制代码
from decimal import Decimal
print(Decimal('0.1') + Decimal('0.2') == Decimal('0.3'))  # True

3. 复数(complex)(了解即可)

用于数学和工程计算,形式为 a + bj

复制代码
z = 3 + 4j
print(z.real)  # 3.0
print(z.imag)  # 4.0

四、文本类型:字符串(str)

字符串是字符的序列,用单引号、双引号或三引号包围。

复制代码
name = "Alice"
message = 'Hello, World!'
multi_line = """这是一个
多行字符串"""

字符串的常用操作

1. 字符串拼接
复制代码
first = "Hello"
last = "World"
full = first + " " + last  # "Hello World"

✅ 推荐使用 f-string(Python 3.6+):

复制代码
name = "Alice"
age = 25
print(f"我是{name},今年{age}岁。")
2. 字符串索引与切片
复制代码
text = "Python"

print(text[0])    # 'P'  第一个字符
print(text[-1])   # 'n'  最后一个字符
print(text[1:4])  # 'yth'  切片 [start:end)
print(text[:3])   # 'Pyt'  从开头到索引3(不含)
print(text[3:])   # 'hon'  从索引3到结尾
3. 常用字符串方法

|----------------------|-----------|------------------------------------------|
| 方法 | 说明 | 示例 |
| .upper() | 转大写 | "hello".upper()"HELLO" |
| .lower() | 转小写 | "HELLO".lower()"hello" |
| .strip() | 去除首尾空白 | " abc ".strip()"abc" |
| .replace(old, new) | 替换 | "abc".replace("a", "x")"xbc" |
| .split(sep) | 分割 | "a,b,c".split(",")['a', 'b', 'c'] |
| .join(list) | 连接 | "-".join(['a','b','c'])"a-b-c" |
| .find(sub) | 查找位置 | "abc".find("b")1 |
| .startswith() | 是否以某字符串开头 | "abc".startswith("a")True |

复制代码
email = "  Alice@EXAMPLE.COM  "
clean_email = email.strip().lower()
print(clean_email)  # "alice@example.com"

五、布尔类型(bool)

布尔值只有两个:TrueFalse,用于逻辑判断。

复制代码
is_student = True
has_permission = False

布尔值的来源:

  • 比较运算的结果

  • 条件判断的结果

  • 任何对象都可以被"真值测试"

    print(5 > 3) # True
    print(10 == 10) # True
    print("hello" != "") # True

    真值测试(Truthiness)

    print(bool(1)) # True
    print(bool(0)) # False
    print(bool("abc")) # True
    print(bool("")) # False
    print(bool([1, 2])) # True
    print(bool([])) # False

规则 :空值(0, "", [], {}, None)为 False,其他为 True


六、序列类型

1. 列表(list)------ 有序、可变

列表是最常用的数据结构,可以存储不同类型的数据。

复制代码
fruits = ["苹果", "香蕉", "橙子"]
numbers = [1, 2, 3, 4, 5]
mixed = ["Alice", 25, True, 3.14]
列表的常用操作:
复制代码
# 访问元素
print(fruits[0])     # "苹果"
print(fruits[-1])    # "橙子"

# 修改元素
fruits[1] = "葡萄"

# 添加元素
fruits.append("草莓")      # 末尾添加
fruits.insert(1, "芒果")   # 在索引1处插入

# 删除元素
fruits.remove("苹果")      # 删除指定值
del fruits[0]             # 删除索引0的元素
popped = fruits.pop()     # 弹出并返回末尾元素

# 列表长度
print(len(fruits))

# 列表切片(同字符串)
print(numbers[1:4])  # [2, 3, 4]

# 遍历列表
for fruit in fruits:
    print(fruit)
列表推导式(List Comprehension)

一种简洁创建列表的方式:

复制代码
# 普通方式
squares = []
for x in range(1, 6):
    squares.append(x**2)

# 推导式方式(推荐)
squares = [x**2 for x in range(1, 6)]
print(squares)  # [1, 4, 9, 16, 25]

# 带条件的推导式
evens = [x for x in range(10) if x % 2 == 0]

2. 元组(tuple)------ 有序、不可变

元组与列表相似,但创建后不能修改

复制代码
coordinates = (10, 20)
person = ("张三", 25, "北京")
single_item = (42,)  # 单个元素的元组,必须加逗号
元组的特点:
  • 更安全:防止意外修改

  • 性能略高:占用内存更少

  • 可作为字典的键(列表不行)

    访问元素(同列表)

    print(person[0]) # "张三"

    不可修改

    person[0] = "李四" # TypeError!


3. range 对象

表示一个不可变的数字序列,常用于 for 循环。

复制代码
r1 = range(5)        # 0, 1, 2, 3, 4
r2 = range(1, 6)     # 1, 2, 3, 4, 5
r3 = range(0, 10, 2) # 0, 2, 4, 6, 8 (步长为2)

for i in range(3):
    print(i)  # 0, 1, 2

💡 range 不是列表,但可以转换:

复制代码
list(range(5))  # [0, 1, 2, 3, 4]

七、映射类型:字典(dict)

字典是键值对(key-value)的集合,类似于现实生活中的"字典"。

复制代码
student = {
    "name": "王五",
    "age": 22,
    "city": "上海",
    "grades": [85, 90, 78]
}

字典的常用操作:

复制代码
# 访问值
print(student["name"])        # "王五"
print(student.get("age"))     # 22
print(student.get("phone", "未知"))  # 安全访问,键不存在时返回默认值

# 修改/添加值
student["age"] = 23           # 修改
student["major"] = "计算机"    # 添加新键值对

# 删除键值对
del student["city"]
popped = student.pop("grades")  # 弹出并返回值

# 遍历字典
for key in student:
    print(f"{key}: {student[key]}")

# 推荐的遍历方式
for key, value in student.items():
    print(f"{key}: {value}")

# 获取所有键、值、键值对
print(student.keys())    # dict_keys(['name', 'age', 'major'])
print(student.values())  # dict_values(['王五', 23, '计算机'])
print(student.items())   # dict_items([('name', '王五'), ...])
字典推导式
复制代码
# 创建平方数字典
squares_dict = {x: x**2 for x in range(1, 6)}
print(squares_dict)  # {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

八、集合类型

1. 集合(set)------ 无序、唯一

集合存储不重复的元素,且无序。

复制代码
unique_numbers = {1, 2, 3, 3, 4}
print(unique_numbers)  # {1, 2, 3, 4}  重复的3被自动去除
集合的常用操作:
复制代码
set1 = {1, 2, 3}
set2 = {3, 4, 5}

# 并集
print(set1 | set2)  # {1, 2, 3, 4, 5}
print(set1.union(set2))

# 交集
print(set1 & set2)  # {3}
print(set1.intersection(set2))

# 差集
print(set1 - set2)  # {1, 2}
print(set1.difference(set2))

# 对称差集
print(set1 ^ set2)  # {1, 2, 4, 5}

# 添加/删除
set1.add(4)
set1.remove(1)  # 元素必须存在
set1.discard(10)  # 元素不存在也不会报错

2. 冻结集合(frozenset)

不可变的集合,可以作为字典的键。

复制代码
fset = frozenset([1, 2, 3])
# fset.add(4)  # AttributeError!

九、类型转换(Type Casting)

Python 允许在不同类型之间转换。

|----------|-------------------|---------------------------------|
| 函数 | 说明 | 示例 |
| int(x) | 将参数转换为整数类型 | int("123") → 123 |
| float(x) | 将参数转换为浮点数类型 | float("3.14") → 3.14 |
| str(x) | 将参数转换为字符串类型 | str(100) → "100" |
| bool(x) | 将参数转换为布尔值类型 | bool(1) → True |
| list(x) | 将参数转换为列表类型 | list("abc") → ['a', 'b', 'c'] |
| tuple(x) | 将参数转换为元组类型 | tuple([1, 2]) → (1, 2) |
| set(x) | 将参数转换为集合类型,去除重复元素 | set([1, 2, 2]) → {1, 2} |
| dict(x) | 将一系列键值对转换为字典类型 | 需要提供键值对序列 |

请注意,对于`dict(x)`函数的具体示例,通常需要给出一个由键值对组成的可迭代对象作为输入。例如,可以使用列表中的元组来创建字典:dict([("key1", "value1"), ("key2", "value2")])将会得到{"key1": "value1", "key2": "value2"}这样的结果。

复制代码
# 示例:用户输入通常是字符串,需要转换
age_str = input("请输入年龄:")  # "25"
age_int = int(age_str)
print(age_int + 5)  # 30

⚠️ 转换失败会抛出异常:

复制代码
int("abc")  # ValueError!

十、总结:Python 数据类型核心要点

|----------------|---------|----------------|---------|-----------|
| 类型 | 可变性 | 有序性 | 唯一性 | 典型用途 |
| int/ float | ❌ | ❌ | ❌ | 数值计算 |
| str | ❌ | ✅ | ❌ | 文本处理 |
| bool | ❌ | ❌ | ❌ | 逻辑判断 |
| list | ✅ | ✅ | ❌ | 存储有序数据列表 |
| tuple | ❌ | ✅ | ❌ | 存储不可变数据序列 |
| dict | ✅ | ✅(Python 3.7+) | 键唯一 | 存储键值对映射 |
| set | ✅ | ❌ | ✅ | 存储唯一元素集合 |

学习建议:

  1. 熟练掌握 int**,** float**,** str**,** bool**,** list**,** dict ------ 这是最常用的五种类型。
  2. 理解可变与不可变的区别list 可变,tuple 不可变。
  3. 善用推导式:让代码更简洁高效。
  4. 注意类型转换:特别是用户输入和文件读取时。

📌 动手练习

  1. 创建一个包含你个人信息的字典(姓名、年龄、城市等)。

  2. 创建一个列表,存储你喜欢的电影,并用 for 循环打印。

  3. 使用 set 找出两个列表的共同元素。

    示例练习

    my_info = {"name": "你的名字", "age": 20, "hobbies": ["阅读", "编程"]}
    print(f"我叫{my_info['name']},爱好是{', '.join(my_info['hobbies'])}。")

相关推荐
路人蛃3 分钟前
Scikit-learn - 机器学习库初步了解
人工智能·python·深度学习·机器学习·scikit-learn·交友
苇柠1 小时前
Spring框架基础(1)
java·后端·spring
xiucai_cs1 小时前
布隆过滤器原理与Spring Boot实战
java·spring boot·后端·布隆过滤器
向阳花自开1 小时前
Spring Boot 常用注解速查表
java·spring boot·后端
red润1 小时前
let obj = { foo: 1 };为什么Reflect.get(obj, ‘foo‘, { foo: 2 }); // 输出 1?
开发语言·javascript·ecmascript
程序视点2 小时前
如何高效率使用 Cursor ?
前端·后端·cursor
froginwe112 小时前
PHP MySQL Delete 操作详解
开发语言
Nep&Preception2 小时前
vasp计算弹性常数
开发语言·python
sp422 小时前
设计一个 Java 本地缓存系统
后端
东阳马生架构3 小时前
Dubbo源码—5.SPI机制和线程模型
后端