1. 变量:程序世界的记忆单元
变量是编程语言中最基础也最重要的概念之一。在Python中,变量就像是我们给数据贴上的标签,让我们可以方便地引用和操作这些数据。与C或Java这类静态类型语言不同,Python的变量使用更加灵活自由。
1.1 变量的命名规则
Python变量命名需要遵循以下规则:
- 只能包含字母、数字和下划线
- 不能以数字开头
- 区分大小写
- 不能使用Python关键字(如if、for等)
提示:建议使用小写字母和下划线组合的命名方式(如user_name),这种风格被称为snake_case,是Python社区的推荐做法。
1.2 变量的赋值与引用
Python使用等号(=)进行赋值操作,例如:
age = 25 name = "张三" is_student = True这里有几个重要特性:
- 动态类型:变量类型在赋值时确定,可以随时改变
- 引用语义:变量存储的是对象的引用而非值本身
- 多重赋值:可以同时给多个变量赋值
x, y, z = 1, 2, 32. Python的核心数据类型
Python内置了丰富的数据类型,理解这些类型是掌握Python的关键。
2.1 数字类型
Python支持三种主要的数字类型:
- 整型(int):如42、-10
- 浮点型(float):如3.14、-0.001
- 复数(complex):如1+2j
数字类型支持各种数学运算:
a = 10 + 3 # 加法 b = 10 - 3 # 减法 c = 10 * 3 # 乘法 d = 10 / 3 # 除法(返回浮点数) e = 10 // 3 # 整除 f = 10 % 3 # 取模 g = 10 ** 3 # 幂运算2.2 布尔类型
布尔型(bool)只有两个值:True和False,常用于条件判断:
is_active = True is_admin = False2.3 序列类型
2.3.1 字符串(str)
字符串是不可变的字符序列:
s1 = '单引号字符串' s2 = "双引号字符串" s3 = """多行 字符串"""字符串常用操作:
name = "Python" print(name[0]) # 索引:P print(name[1:4]) # 切片:yth print(len(name)) # 长度:6 print(name.upper()) # 转大写:PYTHON2.3.2 列表(list)
列表是可变的序列,可以包含不同类型的元素:
fruits = ['apple', 'banana', 'cherry'] numbers = [1, 2, 3, 4, 5] mixed = [1, 'a', True, 3.14]列表常用操作:
fruits.append('orange') # 添加元素 fruits.remove('banana') # 移除元素 fruits[0] = 'pear' # 修改元素 print(len(fruits)) # 获取长度2.3.3 元组(tuple)
元组是不可变的序列:
point = (10, 20) colors = ('red', 'green', 'blue')2.4 映射类型:字典(dict)
字典是键值对的集合:
person = { 'name': '张三', 'age': 30, 'city': '北京' }字典操作:
print(person['name']) # 获取值 person['age'] = 31 # 修改值 person['job'] = '工程师' # 添加新键值对 del person['city'] # 删除键值对2.5 集合类型
集合(set)是无序且不重复的元素集合:
unique_numbers = {1, 2, 3, 3, 4} # {1, 2, 3, 4}集合操作:
a = {1, 2, 3} b = {3, 4, 5} print(a | b) # 并集:{1, 2, 3, 4, 5} print(a & b) # 交集:{3} print(a - b) # 差集:{1, 2}3. 类型转换:数据形态的自由变换
Python提供了内置函数来实现不同类型之间的转换。
3.1 显式类型转换
常用类型转换函数:
int('123') # 字符串转整数:123 float('3.14') # 字符串转浮点数:3.14 str(100) # 数字转字符串:"100" bool(1) # 转布尔值:True list('abc') # 字符串转列表:['a', 'b', 'c'] tuple([1,2,3]) # 列表转元组:(1, 2, 3) set([1,1,2]) # 列表转集合:{1, 2}3.2 隐式类型转换
Python在某些情况下会自动进行类型转换:
result = 3 + 4.5 # int自动转为float:7.5 condition = 1 and True # 1转为True3.3 类型转换的注意事项
- 转换可能丢失精度:
int(3.9) # 结果为3,小数部分被截断- 无效转换会引发异常:
int('abc') # 抛出ValueError- 容器类型转换的特殊情况:
dict([('a',1),('b',2)]) # 转为字典:{'a':1, 'b':2}4. 实际应用中的类型处理技巧
4.1 类型检查与判断
使用type()或isinstance()检查类型:
x = 3.14 print(type(x)) # <class 'float'> print(isinstance(x, float)) # True4.2 处理用户输入
用户输入默认是字符串,常需要转换:
age = input("请输入年龄:") # 返回字符串 age = int(age) # 转为整数4.3 数据格式化输出
使用f-string进行类型转换和格式化:
price = 19.99 print(f"价格:{price:.1f}元") # 价格:20.0元4.4 类型转换的性能考虑
频繁的类型转换会影响性能,特别是在循环中:
# 不推荐 for i in range(10000): x = str(i) + " items" # 推荐 for i in range(10000): x = f"{i} items"5. 常见问题与解决方案
5.1 变量作用域混淆
问题代码:
x = 10 def func(): print(x) # 想使用全局x x = 20 # 实际创建了局部变量 func() # 报错:UnboundLocalError解决方案:
x = 10 def func(): global x # 声明使用全局变量 print(x) x = 20 func() # 正常执行5.2 可变与不可变类型的区别
重要区别:
- 不可变类型:数字、字符串、元组
- 可变类型:列表、字典、集合
示例:
# 不可变类型 a = 1 b = a a = 2 print(b) # 1,b不受a改变影响 # 可变类型 list1 = [1, 2] list2 = list1 list1.append(3) print(list2) # [1, 2, 3],list2随之改变5.3 深拷贝与浅拷贝
对于可变对象,简单的赋值只是创建引用:
import copy original = [1, [2, 3]] shallow = copy.copy(original) # 浅拷贝 deep = copy.deepcopy(original) # 深拷贝 original[1].append(4) print(shallow) # [1, [2, 3, 4]] 内层列表被修改 print(deep) # [1, [2, 3]] 完全独立副本5.4 类型转换的最佳实践
- 始终处理可能的转换异常:
try: num = int(input_str) except ValueError: num = 0 # 提供默认值- 使用类型注解提高代码可读性:
def calculate_total(price: float, quantity: int) -> float: return price * quantity- 避免不必要的类型转换:
# 不推荐 result = str(int(float("3.14"))) # 推荐 result = "3.14"