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

发布于:2025-08-08 ⋅ 阅读:(16) ⋅ 点赞:(0)

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

在 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'])}。")

网站公告

今日签到

点亮在社区的每一天
去签到