数据类型深入解析|第二部分:Python核心数据类型与运算符 (Core Data Types & Operators)

发布于 2025-09-11 分类: Python
系列文章: Python全方位教程
第 1 部分: Python语言概览|第一部分:Python入门与环境搭建 (Python Foundations) 第 2 部分: 搭建开发环境|第一部分:Python入门与环境搭建 (Python Foundations) 第 3 部分: Python基本语法与规范|第一部分:Python入门与环境搭建 (Python Foundations) 第 4 部分: 数据类型深入解析|第二部分:Python核心数据类型与运算符 (Core Data Types & Operators) (当前) 第 5 部分: 运算符大全|第二部分:Python核心数据类型与运算符 (Core Data Types & Operators) 第 6 部分: 条件与循环|第三部分:流程控制与数据结构操作 (Control Flow & Data Structures Manipulation) 第 7 部分: 数据结构高级操作|第三部分:流程控制与数据结构操作 (Control Flow & Data Structures Manipulation) 第 8 部分: 函数|第四部分:函数、模块与代码组织 (Functions, Modules & Code Organization) 第 9 部分: 模块与包|第四部分:函数、模块与代码组织 (Functions, Modules & Code Organization) 第 10 部分: 类与对象|第五部分:面向对象编程 (Object-Oriented Programming - OOP) 第 11 部分: OOP核心特性|第五部分:面向对象编程 (Object--Oriented Programming - OOP) 第 12 部分: 高级OOP主题|第五部分:面向对象编程 (Object-Oriented Programming - OOP) 第 13 部分: 迭代与生成|第六部分:高级Python编程 (Advanced Python) 第 15 部分: 内存管理与性能|第六部分:高级Python编程 (Advanced Python) 第 16 部分: 文件与目录操作|第七部分:Python标准库精选 (The Standard Library) 第 17 部分: 数据处理与序列化|第七部分:Python标准库精选 (The Standard Library) 第 18 部分: 网络与并发编程|第七部分:Python标准库精选 (The Standard Library) 第 20 部分: 系统交互|第七部分:Python标准库精选 (The Standard Library) 第 21 部分: 数据科学与分析入门|第八部分:Python生态与实战应用 (Ecosystem & Applications) 第 22 部分: Web开发入门|第八部分:Python生态与实战应用 (Ecosystem & Applications) 第 23 部分: GUI编程入门|第八部分:Python生态与实战应用 (Ecosystem & Applications) 第 24 部分: 图像处理入门|第八部分:Python生态与实战应用 (Ecosystem & Applications) 第 25 部分: 自动化脚本|第八部分:Python生态与实战应用 (Ecosystem & Applications) 第 26 部分: Python备忘单 (Cheatsheet)|第九部分:附录与资源 (Appendix & Resources) 第 27 部分: 常见面试题与解答|第九部分:附录与资源 (Appendix & Resources) 第 28 部分: 官方文档与其他学习资源链接|第九部分:附录与资源 (Appendix & Resources)

欢迎来到Python世界的“元素周期表”!在上一章,我们已经搭建好了环境,并写下了第一行代码。现在,是时候深入了解构成Python程序的真正核心——数据类型了。

想象一下,你要建造一座宏伟的城堡。你需要石头、木材、沙子和水。这些基础材料就是编程世界里的数据类型。它们各自有不同的形态、特性和用途。在Python中,我们有数字、文字、列表、字典等等。理解它们,就像一位建筑大师熟悉他手中的每一种材料。准备好了吗?让我们来认识一下这些强大的“建筑材料”!

4.1 数字家族:整型 int, 浮点型 float, 复数 complex

在编程世界里,数字是最基础、最常见的元素。Python将它们细致地分为了几位核心成员。

  • 整型 (Integer, int): 就是我们数学中学的整数,可正可负,没有小数点。在Python 3中,一个整数的大小只受限于你电脑的内存,所以你完全可以计算宇宙中的原子数量!

    # 这是一个整数
    age = 18
    print(age)  # 输出: 18
    
    # 一个非常大的整数
    star_count = 100000000000000000000
    print(star_count) # 输出: 100000000000000000000
    
    # 负数
    temperature = -10
    print(temperature) # 输出: -10
    
  • 浮点型 (Floating-Point, float): 这就是我们常说的小数。当你需要精确计算或者处理带有小数部分的数据时,浮点型就派上用场了。

    pi = 3.14159
    print(pi) # 输出: 3.14159
    
    price = 99.9
    print(price) # 输出: 99.9
    
  • 复数 (Complex, complex): 这是为科学和工程计算准备的“秘密武器”。如果你在高中数学中接触过复数(形如 a + bj),那么你会感到非常亲切。如果没接触过,别担心,在日常编程中你很少会用到它。

    # 创建一个复数
    c = 3 + 4j
    print(c) # 输出: (3+4j)
    
    # 查看它的实部和虚部
    print(c.real) # 输出: 3.0
    print(c.imag) # 输出: 4.0
    

4.2 逻辑的基石:布尔类型 boolNone 类型

  • 布尔类型 (bool): 这是世界上最简单的类型,却也是构建所有复杂逻辑的基石。它只有两个值:True (真) 和 False (假)。你可以把它想象成一个开关,只有“开”和“关”两种状态。在后续的条件判断中,它将扮演至关重要的角色。

    is_learning = True
    is_tired = False
    
    print(is_learning) # 输出: True
    
    # 通常,布尔值由比较产生
    print(5 > 3) # 5大于3吗? 是的,所以输出: True
    print(10 == 20) # 10等于20吗? 不是,所以输出: False
    
  • None类型 (NoneType): None 是一个非常特殊的值,它代表“空”、“无”或者“不存在”。它不是 0,也不是空字符串 '',它就是它自己——None。当你定义一个变量但暂时不想给它赋任何有意义的值时,None 是一个绝佳的占位符。

    # 用户的地址信息,暂时未知
    address = None
    print(address) # 输出: None
    
    # 检查一个变量是否为None
    if address is None:
        print("用户的地址信息尚未填写!")
    

4.3 文字的艺术:字符串 str

字符串(String)就是一系列的文本字符,用来表示我们世界中的名字、句子、文章等。在Python中,你可以用单引号 '...'、双引号 "..." 甚至三引号 '''...'''"""...""" 来创建字符串。

name = "Guido van Rossum"
motto = 'Hello, World!'
paragraph = """这是一个可以跨越多行的
长字符串。
非常方便!"""

print(name)
print(motto)
print(paragraph)

字符串的核心特性:

  • 不可变性 (Immutability): 这是字符串最重要的一个特性!一旦一个字符串被创建,它内部的任何一个字符都不能被修改。这就像一块刻在石碑上的文字,你只能读取它,或者用一块新石碑替换它,但不能在原来的石碑上“抠掉”一个字再改写。

    s = "python"
    # 尝试修改第一个字符,从 'p' 改为 'J'
    # s[0] = 'J' # 这行代码会立刻报错!TypeError: 'str' object does not support item assignment
    
    # 正确的做法是创建一个新的字符串
    new_s = "J" + s[1:]
    print(new_s) # 输出: Jython
    print(s)     # 输出: python (原始字符串并未改变)
    
  • Unicode支持: Python 3 的字符串天生支持Unicode,这意味着你可以轻松处理世界上任何语言的文字,无论是中文、日文、还是表情符号 Emojis!

    greeting = "你好,世界!"
    emoji = "🐍💻❤️"
    print(greeting, emoji) # 输出: 你好,世界! 🐍💻❤️
    
  • 转义字符: 如果你想在字符串中包含一些特殊字符,比如一个引号或者一个换行符,就需要用到反斜杠 \ 进行“转义”。

    # 在字符串中使用双引号
    quote = "他说:\"人生苦短,我用Python。\""
    print(quote) # 输出: 他说:"人生苦短,我用Python。"
    
    # 使用 \n 进行换行
    lines = "第一行\n第二行"
    print(lines)
    # 输出:
    # 第一行
    # 第二行
    

4.4 万能的容器:列表 list (可变序列)

列表是Python中最常用、最灵活的数据结构。你可以把它想象成一个可以随时添加、删除或修改物品的购物篮

  • 特点: 有序、可变、可以包含任意类型的元素。
  • 创建: 使用方括号 [],元素之间用逗号 , 分隔。
# 一个包含数字的列表
numbers = [1, 2, 3, 4, 5]

# 一个包含字符串的列表
fruits = ["apple", "banana", "cherry"]

# 一个混合类型的列表 (完全没问题!)
mixed_bag = [1, "hello", 3.14, True, None]

print(fruits)      # 输出: ['apple', 'banana', 'cherry']
print(mixed_bag)   # 输出: [1, 'hello', 3.14, True, None]

# 修改列表中的元素(因为列表是可变的!)
fruits[0] = "orange"
print(fruits)      # 输出: ['orange', 'banana', 'cherry']

# 添加一个新元素到末尾
fruits.append("grape")
print(fruits)      # 输出: ['orange', 'banana', 'cherry', 'grape']

4.5 坚固的契约:元组 tuple (不可变序列)

元组(Tuple)看起来和列表非常相似,但它有一个关键区别:元组是不可变的。一旦创建,就不能再修改。它就像一份签署后不可更改的合同

  • 特点: 有序、不可变、可以包含任意类型的元素。
  • 创建: 使用圆括号 (),元素之间用逗号 , 分隔。
# 创建一个元组
point = (10, 20)
rgb_color = (255, 0, 0) # 代表红色

print(point) # 输出: (10, 20)

# 尝试修改元组的元素
# point[0] = 15 # 这行代码会立刻报错!TypeError: 'tuple' object does not support item assignment

# 为什么需要元组?
# 1. 安全性:当你希望数据不被意外修改时。
# 2. 性能:通常比列表稍快。
# 3. 作为字典的键:因为字典的键必须是不可变的,所以元组可以,但列表不行。

小提示: 创建只有一个元素的元组时,别忘了在元素后面加一个逗号,否则Python会把它当作普通的括号表达式。
single_tuple = (42,)
not_a_tuple = (42)

4.6 精准的查找:字典 dict (键值对映射)

字典(Dictionary)是另一种极其有用的数据结构。它存储的是键-值(key-value)对。你可以把它想象成一本真正的字典,你通过一个“词”(key)去查找它的“释义”(value)。

  • 特点: 无序(在Python 3.7+中变为有序)、可变、键必须唯一且不可变。
  • 创建: 使用花括号 {},键和值之间用冒号 : 分隔,每对之间用逗号 , 分隔。
# 创建一个描述一个人的字典
person = {
    "name": "Alice",
    "age": 25,
    "city": "New York",
    "is_student": False
}

# 通过键来获取值
print(person["name"]) # 输出: Alice
print(person["age"])  # 输出: 25

# 修改一个值
person["city"] = "London"
print(person) # 输出: {'name': 'Alice', 'age': 25, 'city': 'London', 'is_student': False}

# 添加一个新的键值对
person["email"] = "alice@example.com"
print(person["email"]) # 输出: alice@example.com

4.7 独特的集合:集合 set (无序、唯一元素集合)

集合(Set)是一个不包含重复元素的无序集合。它就像一个只装独一无二宝贝的魔法袋,你放进去两个相同的宝贝,它会自动帮你保留一个。

  • 特点: 无序、元素唯一、可变。
  • 创建: 使用花括号 {} 或者 set() 函数。注意,创建一个空集合必须用 set(),因为 {} 会创建一个空字典。
# 从一个有重复元素的列表创建集合
numbers_list = [1, 2, 2, 3, 4, 4, 4, 5]
unique_numbers = set(numbers_list)
print(unique_numbers) # 输出: {1, 2, 3, 4, 5} (顺序可能不同)

# 集合的主要用途:
# 1. 去重
# 2. 成员检测 (速度极快)
print(3 in unique_numbers) # 输出: True
print(10 in unique_numbers) # 输出: False

# 3. 数学运算 (交集、并集、差集等)
set_a = {1, 2, 3}
set_b = {3, 4, 5}
print(set_a & set_b) # 交集: {3}
print(set_a | set_b) # 并集: {1, 2, 3, 4, 5}

4.8 核心概念:动态类型 (Dynamic Typing)

现在,我们来揭示Python一个极其重要的魔法——动态类型

在许多其他语言(如Java或C++)中,你必须在创建变量时就“宣誓”它的类型,并且终生不改。
int age = 18; // age永远是整数

但在Python中,变量就像一个可以贴任何标签的通用盒子。你不需要预先声明类型,Python解释器会在运行时自动帮你识别。同一个变量名,可以先后指向不同类型的数据。

# my_variable 先是一个整数
my_variable = 100
print(type(my_variable)) # 输出: <class 'int'>

# 现在,我们让它指向一个字符串,完全没问题!
my_variable = "Hello Python!"
print(type(my_variable)) # 输出: <class 'str'>

# 接着,让它指向一个列表
my_variable = [1, 2, 3]
print(type(my_variable)) # 输出: <class 'list'>

这种灵活性是Python如此易学和开发迅速的关键原因之一。但也要小心,它也意味着你需要自己多加留意,确保变量里装的是你期望的类型。

4.9 类型的“变形记”:类型转换 (Casting)

有时候,我们需要在不同数据类型之间进行转换。比如,从用户那里获取的输入默认是字符串,但我们可能需要把它当作数字来计算。这个过程就叫做类型转换类型强制转换(Casting)

Python提供了一系列内置函数来完成这个任务,它们的名字通常就是目标类型的名字。

  • int(): 转换为整数
  • float(): 转换为浮点数
  • str(): 转换为字符串
  • list(): 转换为列表
  • tuple(): 转换为元组
  • set(): 转换为集合
# 从字符串到数字
num_str = "123"
num_int = int(num_str)
print(num_int + 100) # 输出: 223

# 注意:如果字符串不能被解析为数字,会报错!
# int("hello") # 这会引发 ValueError

# 从数字到字符串
age = 25
message = "My age is " + str(age)
print(message) # 输出: My age is 25

# 从列表到元组
my_list = [1, 2, 3]
my_tuple = tuple(my_list)
print(my_tuple) # 输出: (1, 2, 3)

# 从字符串到列表
word = "spam"
letters = list(word)
print(letters) # 输出: ['s', 'p', 'a', 'm']

恭喜你!你已经成功认识了Python世界中最重要的几位“主角”。它们是构建一切复杂逻辑和数据结构的基础。现在,你脑海中应该有了一幅清晰的蓝图:

  • 数字 (int, float) 用于计算。
  • 布尔 (bool) 用于判断。
  • 字符串 (str) 用于表示文本。
  • 列表 (list) 是可变的万能容器。
  • 元组 (tuple) 是不可变的稳定容器。
  • 字典 (dict) 用于精确的键值查找。
  • 集合 (set) 用于处理不重复的元素。

这些数据类型就像你的工具箱,而Python的动态类型特性则给了你极大的自由去使用它们。

在下一章,我们将学习如何使用运算符——那些神奇的符号(+, -, *, /, ==, > 等),来让这些数据类型互动、碰撞,并创造出强大的功能。准备好,真正的魔法即将上演!


-- 感谢阅读 --