变量与数据类型精讲:零基础实例对比与常见错误避坑指南
任何编程入门都必须掌握变量与数据类型。Python 在这方面设计极为简洁——它采用动态类型机制,开发者无需像 C 或 Java 那样预先声明类型,直接赋值即可使用。这一特性显著降低了初学者的认知负担。
02 - Python变量与数据类型详解
学习目标: 熟练运用Python基础数据类型与变量赋值
? 核心概念拆解
Python根据赋值内容自动推断变量类型,这是解释器在运行时的动态绑定行为。类比一个容器:放入苹果归类为水果箱,放入书本就变为书箱——具备灵活性而不失逻辑性。
Python原生数据类型一览
| 数据类型 | 英文名 | 示例 | 说明 |
|---|---|---|---|
| 整数 | int | 42, -10, 0 | 任意精度,无溢出风险 |
| 浮点数 | float | 3.14, -0.5 | 双精度浮点小数 |
| 字符串 | str | "hello", 'world' | 不可变字符序列 |
| 布尔值 | bool | True, False | 逻辑真/假 |
| 空值 | None | None | Null占位符 |
? 实战代码演示
理论结合代码更直观,下面通过实例深入理解。
示例1:动态变量赋值
# 不需要声明类型,直接赋值
x = 10 # 整数
y = 3.14 # 浮点数
name = "Alice" # 字符串
is_valid = True # 布尔值
result = None # 空值
# 查看类型
print(type(x)) #
print(type(name)) #
不用手动指定类型,Python在后台自动处理。type()函数可以随时查询变量的实际类型,就像一面类型检查镜。
示例2:整数(int)
a = 10
b = -5
c = 0
# 基本运算
print(a + b) # 5
print(a - b) # 15
print(a * b) # -50
print(a / b) # -2.0 (除法结果是浮点数)
print(a // b) # -2 (整除)
print(a % 3) # 1 (取余)
print(a ** 2) # 100 (幂运算)
# Python的整数没有大小限制!
big = 12345678901234567890
print(big * 2) # 不会溢出
整数除法有一个关键细节:/始终返回浮点数,即使能整除。若需整数结果,应使用//整除操作符。此外,Python整型无溢出——只要内存足够,可表示任意大的整数。
示例3:浮点数(float)
x = 3.14
y = -0.5
print(x + y) # 2.64
print(x * 2) # 6.28
# ⚠️ 浮点数精度问题
print(0.1 + 0.2) # 0.30000000000000004 (不是0.3!)
浮点数存在经典精度陷阱,这并非Python独有,而是所有编程语言通用的二进制表示局限。就像十进制无法精确表示1/3,二进制也无法精确表示0.1。处理财务或高精度计算时,应使用decimal模块而非直接采用float。
示例4:字符串(str)
# 单引号或双引号都可以
s1 = "hello"
s2 = 'world'
# 字符串拼接
print(s1 + " " + s2) # hello world
# 字符串重复
print("ha" * 3) # hahaha
# 访问字符
print(s1[0]) # h (第一个字符)
print(s1[-1]) # o (最后一个字符)
# 字符串是不可变的
# s1[0] = 'H' # ❌ 报错!
字符串支持+拼接和*重复,索引从0开始,负数表示倒数。核心特性是不可变性——创建后无法修改单个字符,任何改动都会生成新字符串。
示例5:布尔值(bool)
is_adult = True
is_student = False
# 逻辑运算
print(True and False) # False
print(True or False) # True
print(not True) # False
# 比较运算返回布尔值
print(5 > 3) # True
print(5 == 5) # True
print(5 != 3) # True
# 在条件判断中使用
if is_adult:
print("成年人")
布尔值虽只有两个,却是逻辑决策的基石。注意and和or的短路求值特性——一旦结果确定,后续表达式不再执行。实际编码中常利用此特性进行防御性检查。
示例6:None - 空值
x = None
# 检查是否为None
if x is None:
print("x是空值")
# 函数没有返回值时返回None
def do_nothing():
pass
result = do_nothing()
print(result) # None
# 默认参数常用None
def greet(name=None):
if name is None:
print("Hello, Guest!")
else:
print(f"Hello, {name}!")
greet() # Hello, Guest!
greet("Alice") # Hello, Alice!
None表示“没有值”,并非0、空字符串或False。判断None时应使用is而非==,这是Python社区推荐的风格。函数若无显式return语句,默认返回None。
? 算法题实战应用
学完基本类型,看它们在经典算法题中的串联使用。
# 第1课:两数之和
def twoSum(nums, target): # nums: list, target: int
seen = {} # dict
for i, num in enumerate(nums): # i: int, num: int
complement = target - num # int
if complement in seen: # bool
return [seen[complement], i] # list
seen[num] = i
return [] # 空列表
# 第26课:环形链表
def hasCycle(head): # head: ListNode or None
if not head: # head is None
return False # bool
slow = fast = head
while fast and fast.next:
slow = slow.next
fast = fast.next.next
if slow == fast:
return True
return False
两数之和中使用了int、bool、list、dict;环形链表涉及None、bool以及ListNode对象。这些基础类型是构建复杂数据结构的零散积木。
?️ 快速巩固练习
练习1:类型转换
# 字符串转整数
s = "123"
x = int(s)
print(x + 1) # 124
# 整数转字符串
num = 456
s = str(num)
print(s + "789") # "456789"
# 注意:不能直接转换非数字字符串
# int("hello") # ❌ ValueError
类型转换是日常高频操作,注意并非所有字符串都能转换为数字,int("hello")直接抛出ValueError。建议在转换前加入校验或异常处理。
练习2:交换两个变量
a = 10
b = 20
# Python特有的简洁写法
a, b = b, a
print(a) # 20
print(b) # 10
该特性省去了传统语言中的临时变量,一行完成交换。其背后原理是元组打包与解包,熟悉元组后更容易理解。
? 关键要点回顾
✅ Python采用动态类型,变量无需声明类型
✅ 五种基本类型:int、float、str、bool、None
✅ 使用type()查看变量类型
✅ 整数无大小限制,支持任意精度
✅ 字符串不可变,修改需生成新对象
✅ 用None表示空值,判断用is
下一步: 03-运算符.md
