⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

Python 变量与数据类型

学习变量赋值、数字、字符串、布尔类型 · 难度:入门 · +10XP

Python 变量与数据类型 — 优雅简洁的数据管理

一、什么是 Python 变量?为什么它如此优雅?

在 Python 中,变量可以理解为一个名字标签(Name Tag),它贴在内存中的某个对象上。与 JavaScript 不同,Python 是强类型、动态类型语言:强类型意味着不同类型之间不会隐式转换("5" + 5 会报错),动态类型意味着变量可以随时指向不同类型的对象,无需事先声明类型。

为什么 Python 的变量设计重要?Python 的设计哲学是"简单优于复杂,明了优于隐晦"。它的变量系统让初学者能快速上手,同时又有足够深度支撑大型项目的开发。理解 Python 的可变(mutable)与不可变(immutable)对象概念,是写出正确、高效 Python 代码的关键。

Python 中一切皆对象:整数、字符串、函数、类,甚至是模块本身,都是对象。每个对象都有三个要素:标识(id)、类型(type)、值(value)。

二、Python 核心数据类型全景图

分类类型可变性示例
数字类型int(整数)不可变42-70b1010(二进制)
float(浮点数)不可变3.14-0.51.2e5(科学计数)
complex(复数)不可变1+2j3-4j
文本类型str(字符串)不可变"hello"'Python'"""多行"""
bytes(字节串)不可变b"hello"
布尔类型bool不可变TrueFalse(注意首字母大写!)
空类型NoneType不可变(单例)None(等价于 null)
容器类型list(列表)可变[1, 2, 3]["a", "b"]
tuple(元组)不可变(1, 2)("x",)
dict(字典)可变{"key": "value"}
set(集合)可变{1, 2, 3}

三、可变 vs 不可变对象 — 必须理解的核心概念

对比维度不可变对象可变对象
类型int, float, str, tuple, bool, Nonelist, dict, set, 自定义对象
能否修改内容不能。任何"修改"都是创建新对象能。内容可以被原地修改
作为函数参数传递值(函数内修改不影响外部)传递引用(函数内修改会影响外部!)
可作为字典的键可以(因为 hash 值不变)不可以(hash 值可能变化)
内存效率可能产生更多临时对象更节省内存

四、详细代码示例(逐行注释)

# ======== 1. 变量赋值 — 无需声明类型 ========
name = "小明"             # 字符串(str),自动推断类型
age = 18                 # 整数(int)
height = 1.75            # 浮点数(float)
is_student = True        # 布尔值(bool),注意大写 T 和 F
hobbies = ["篮球", "编程", "阅读"]  # 列表(list)
profile = {"name": "小明", "age": 18}  # 字典(dict)

# 变量可以随时改变类型(动态类型) x = 42 # x 是 int x = "hello" # 现在 x 是 str(完全合法)

# ======== 2. 类型检查和转换 ======== print(type(age)) # — 查看类型 print(isinstance(age, int)) # True — 判断是否为某类型

# 类型转换(显式转换,不会隐式发生) num_str = "123" num_int = int(num_str) # 字符串 → 整数:123 num_float = float("3.14")# 字符串 → 浮点数:3.14 str_num = str(42) # 整数 → 字符串:"42" bool_val = bool(1) # → True(0、空容器、None 为 False)

# ======== 3. 字符串操作 ======== s = "Python编程" print(len(s)) # 7 — 字符串长度 print(s[0]) # 'P' — 索引(从 0 开始) print(s[-1]) # '程' — 负数索引从末尾开始 print(s[0:6]) # 'Python' — 切片 [开始:结束:步长] print(s.upper()) # 'PYTHON编程' — 转大写 print(s.replace("Python", "Java")) # 'Java编程' — 替换 # f-string(Python 3.6+,最推荐) print(f"我叫{name},今年{age}岁") # 嵌入变量,简洁清晰

# ======== 4. 数字运算 ======== a, b = 10, 3 print(a + b) # 13 — 加法 print(a - b) # 7 — 减法 print(a * b) # 30 — 乘法 print(a / b) # 3.3333... — 除法(总是返回 float) print(a // b) # 3 — 整除(向下取整) print(a % b) # 1 — 取余 print(a ** b) # 1000 — 幂运算(10 的 3 次方)

# ======== 5. 可变对象 vs 不可变对象(重要!) ======== # 不可变对象 — str text = "hello" text2 = text text = text + " world" # 创建新字符串,text 指向新对象 print(text2) # 输出 "hello"(未受影响!)

# 可变对象 — list list1 = [1, 2, 3] list2 = list1 # list2 指向同一对象(不是复制!) list1.append(4) # 原地修改 print(list2) # 输出 [1, 2, 3, 4](也变了!) # 正确复制列表的方式: list3 = list1.copy() # 或 list1[:] 或 list(list1)

# ======== 6. 多重赋值与交换(Python 特色) ======== a, b, c = 1, 2, 3 # 同时赋值三个变量 a, b = b, a # 一行交换两个变量的值(无需临时变量!) print(a, b) # 输出:2 1

# 解包(unpacking) data = ("小明", 18, "北京") name, age, city = data # 同时解包到三个变量

# ======== 7. None 的使用 ======== result = None # 表示"尚无值" if result is None: # 判断 None 必须用 is,不能用 == print("暂无结果") # None 是单例,is 比较的是身份,比 == 更准确

# ======== 8. 全局变量与局部变量 ======== count = 0 # 全局变量 def increment(): global count # 在函数内修改全局变量需要 global 声明 count += 1 local_var = 10 # 局部变量,只在函数内可见

五、Python vs JavaScript 变量对比

特性PythonJavaScript
声明方式直接赋值,无需关键字var / let / const
类型系统强类型(不会隐式转换)弱类型(会隐式类型转换)
"5" + 5 结果TypeError(报错)"55"(字符串拼接)
布尔值True / False(大写)true / false(小写)
空值Nonenull / undefined
常量约定大写(非强制)const(强制不可变)
变量提升有(var)

六、实践任务

  1. 创建变量存储你的姓名、年龄、城市,使用 f-string 输出一句完整的自我介绍
  2. 编写一个程序,交换两个变量的值(使用 Python 的一行交换语法)
  3. 创建一个列表 [1, 2, 3],将它赋值给另一个变量,然后修改原列表,观察两个变量是否都变了,理解可变对象
  4. 使用 type()isinstance() 检查各种类型
  5. 尝试将字符串 "abc" 和数字 123 直接相加,观察报错信息,然后用 str() 正确转换后再拼接
Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 152 篇
0 完成
🔥 0