第9集 赋值运算符
1. 赋值运算符概述
赋值运算符用于将值赋给变量。Python提供了多种赋值运算符,可以简化代码。
| 运算符 | 名称 | 示例 | 等价于 |
|---|---|---|---|
= |
简单赋值 | a = b |
a = b |
+= |
加法赋值 | a += b |
a = a + b |
-= |
减法赋值 | a -= b |
a = a - b |
*= |
乘法赋值 | a *= b |
a = a * b |
/= |
除法赋值 | a /= b |
a = a / b |
//= |
整除赋值 | a //= b |
a = a // b |
%= |
取余赋值 | a %= b |
a = a % b |
**= |
幂赋值 | a **= b |
a = a ** b |
2. 简单赋值运算符(=)
2.1 基本用法
# 基本赋值
a = 10
print(a) # 输出:10
# 重新赋值
a = 20
print(a) # 输出:20
# 链式赋值
a = b = c = 100
print(a, b, c) # 输出:100 100 1002.2 多重赋值
# 同时给多个变量赋值
x, y, z = 1, 2, 3
print(x, y, z) # 输出:1 2 3
# 交换两个变量的值
a = 10
b = 20
print(f"交换前:a = {a}, b = {b}")
a, b = b, a
print(f"交换后:a = {a}, b = {b}") # 输出:a = 20, b = 102.3 序列解包
# 列表解包
numbers = [1, 2, 3]
a, b, c = numbers
print(a, b, c) # 输出:1 2 3
# 元组解包
point = (10, 20)
x, y = point
print(x, y) # 输出:10 20
# 字典解包
my_dict = {"name": "张三", "age": 18}
name, age = my_dict.values()
print(name, age) # 输出:张三 18
# 使用*_忽略某些值
numbers = [1, 2, 3, 4, 5]
a, b, *rest = numbers
print(a, b, rest) # 输出:1 2 [3, 4, 5]
# 使用*忽略中间值
numbers = [1, 2, 3, 4, 5]
first, *middle, last = numbers
print(first, middle, last) # 输出:1 [2, 3, 4] 5
# 使用_忽略单个值
a, _, b = [1, 2, 3]
print(a, b) # 输出:1 33. 增强赋值运算符
3.1 加法赋值(+=)
# 数字相加
num = 10
num += 5 # 等价于 num = num + 5
print(num) # 输出:15
# 字符串连接
text = "Hello"
text += " World" # 等价于 text = text + " World"
print(text) # 输出:Hello World
# 列表合并
my_list = [1, 2]
my_list += [3, 4] # 等价于 my_list = my_list + [3, 4]
print(my_list) # 输出:[1, 2, 3, 4]3.2 减法赋值(-=)
# 数字相减
num = 20
num -= 5 # 等价于 num = num - 5
print(num) # 输出:153.3 乘法赋值(*=)
# 数字相乘
num = 5
num *= 3 # 等价于 num = num * 3
print(num) # 输出:15
# 字符串重复
text = "Hello"
text *= 3 # 等价于 text = text * 3
print(text) # 输出:HelloHelloHello
# 列表重复
my_list = [1, 2]
my_list *= 2 # 等价于 my_list = my_list * 2
print(my_list) # 输出:[1, 2, 1, 2]3.4 除法赋值(/=)
# 数字相除
num = 10
num /= 2 # 等价于 num = num / 2
print(num) # 输出:5.0(结果是浮点数)
num = 10
num /= 4
print(num) # 输出:2.53.5 整除赋值(//=)
# 数字整除
num = 10
num //= 3 # 等价于 num = num // 3
print(num) # 输出:3
num = 10
num //= 2
print(num) # 输出:53.6 取余赋值(%=)
# 数字取余
num = 10
num %= 3 # 等价于 num = num % 3
print(num) # 输出:1
num = 10
num %= 2
print(num) # 输出:03.7 幂赋值(**=)
# 数字幂运算
num = 2
num **= 3 # 等价于 num = num ** 3
print(num) # 输出:8
num = 5
num **= 2
print(num) # 输出:254. 特殊赋值运算符
4.1 海象运算符(:=)
Python 3.8引入的海象运算符(:=),可以在表达式中进行赋值。
# 传统方式
if len(text) > 10:
length = len(text)
print(f"文本长度:{length}")
# 使用海象运算符
if (length := len(text)) > 10:
print(f"文本长度:{length}")
# 在列表推导式中使用
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 找出所有平方大于20的数字
result = [x for x in numbers if (square := x ** 2) > 20]
print(result) # 输出:[5, 6, 7, 8, 9, 10]
# 在while循环中使用
while (user_input := input("输入'quit'退出:")) != "quit":
print(f"你输入了:{user_input}")4.2 位运算赋值运算符
# 位与赋值(&=)
a = 5 # 101
a &= 3 # 011
print(a) # 输出:1(001)
# 位或赋值(|=)
a = 5 # 101
a |= 3 # 011
print(a) # 输出:7(111)
# 位异或赋值(^=)
a = 5 # 101
a ^= 3 # 011
print(a) # 输出:6(110)
# 左移赋值(<<=)
a = 5 # 101
a <<= 2
print(a) # 输出:20(10100)
# 右移赋值(>>=)
a = 20 # 10100
a >>= 2
print(a) # 输出:5(101)5. 综合应用示例
5.1 计数器程序
"""
计数器程序
使用增强赋值运算符
"""
# 数字计数器
count = 0
# 增加计数
count += 1 # count = count + 1
print(f"计数:{count}") # 输出:1
# 增加多个
count += 5
print(f"计数:{count}") # 输出:6
# 减少计数
count -= 2
print(f"计数:{count}") # 输出:4
# 累加和
total = 0
numbers = [10, 20, 30, 40, 50]
for num in numbers:
total += num
print(f"总和:{total}") # 输出:1505.2 温度转换循环
"""
温度转换循环
"""
celsius = 0
print("摄氏度\t华氏度")
print("-" * 20)
while celsius <= 100:
fahrenheit = celsius * 9 / 5 + 32
print(f"{celsius}\t{fahrenheit:.1f}")
celsius += 10 # 增加摄氏度5.3 字符串处理
"""
字符串处理示例
"""
# 字符串拼接
message = ""
message += "Hello"
message += " "
message += "World"
print(message) # 输出:Hello World
# 使用列表和join(更高效)
words = ["Hello", "World", "Python"]
message = " ".join(words)
print(message) # 输出:Hello World Python
# 去除重复字符
text = "hello"
unique_chars = ""
for char in text:
if char not in unique_chars:
unique_chars += char
print(unique_chars) # 输出:helo5.4 统计分析
"""
统计分析程序
"""
scores = [85, 90, 78, 92, 88, 76, 95, 82, 89, 91]
# 初始化统计变量
total = 0
count = 0
max_score = 0
min_score = 100
# 统计
for score in scores:
total += score
count += 1
if score > max_score:
max_score = score
if score < min_score:
min_score = score
# 计算平均
average = total / count
# 输出结果
print(f"成绩列表:{scores}")
print(f"总人数:{count}")
print(f"总分:{total}")
print(f"平均分:{average:.2f}")
print(f"最高分:{max_score}")
print(f"最低分:{min_score}")5.5 简单的ATM模拟
"""
简单的ATM模拟
"""
# 初始余额
balance = 1000
print(f"初始余额:{balance}元")
# 存款
deposit = 500
balance += deposit
print(f"存款{deposit}元,当前余额:{balance}元")
# 取款
withdrawal = 300
if balance >= withdrawal:
balance -= withdrawal
print(f"取款{withdrawal}元,当前余额:{balance}元")
else:
print("余额不足,取款失败")
# 利息(假设年利率5%)
interest_rate = 0.05
balance *= (1 + interest_rate)
print(f"利息{interest_rate*100}%,当前余额:{balance:.2f}元")6. 变量作用域
6.1 全局变量和局部变量
# 全局变量
global_var = 100
def function1():
# 局部变量
local_var = 50
print(f"局部变量:{local_var}")
print(f"访问全局变量:{global_var}")
function1()
print(f"全局变量:{global_var}")
# print(local_var) # 错误:无法访问局部变量6.2 使用global关键字
# 全局变量
count = 0
def increment():
global count # 声明使用全局变量
count += 1
print(f"函数内count:{count}")
print(f"初始count:{count}")
increment()
increment()
print(f"最终count:{count}")6.3 使用nonlocal关键字
def outer():
# 外部函数的变量
x = 10
def inner():
nonlocal x # 声明使用外部函数的变量
x += 5
print(f"内层函数x:{x}")
print(f"修改前x:{x}")
inner()
print(f"修改后x:{x}")
outer()7. 常见错误
7.1 混淆赋值和相等
# 错误:在条件中使用=
if a = 10: # 错误:SyntaxError
pass
# 正确:使用==
if a == 10:
pass7.2 变量未定义
# 错误:使用未定义的变量
print(x) # NameError: name 'x' is not defined
# 正确:先定义再使用
x = 10
print(x)7.3 类型不匹配
# 错误:字符串和数字直接相加
num = "10"
num += 5 # TypeError: can only concatenate str
# 正确:先转换类型
num = int(num)
num += 5
print(num)8. 赋值运算符的最佳实践
8.1 使用有意义的变量名
# 推荐:有意义的变量名
student_name = "张三"
total_score = 95
average_score = 95.5
# 不推荐:无意义的变量名
n = "张三"
ts = 95
as_ = 95.58.2 使用增强赋值运算符简化代码
# 传统写法
count = count + 1
total = total + num
# 推荐写法
count += 1
total += num8.3 链式赋值和多重赋值
# 链式赋值(所有变量指向同一个对象)
a = b = c = []
a.append(1)
print(b) # 输出:[1](b也改变了)
# 多重赋值(创建不同的对象)
a, b, c = [], [], []
a.append(1)
print(b) # 输出:[](b没有改变)9. 本集总结
本集我们学习了:
- 简单赋值运算符的使用
- 多重赋值和序列解包
- 各种增强赋值运算符(+=, -=, *=, /=, //=, %=, **=)
- 海象运算符(:=)的使用
- 位运算赋值运算符
- 变量作用域(global和nonlocal)
- 多个实际应用示例
- 赋值运算符的最佳实践
核心要点:
- 赋值运算符用于将值赋给变量
- 增强赋值运算符可以简化代码
- 序列解包可以方便地同时给多个变量赋值
- 海象运算符可以在表达式中赋值(Python 3.8+)
- 注意变量作用域,使用global和nonlocal关键字
- 赋值和相等是不同的(= vs ==)
- 使用有意义的变量名提高代码可读性
下一集预告:我们将学习运算符优先级,了解不同运算符的执行顺序。
10. 课后练习
- 编写程序,使用增强赋值运算符计算1到100的和
- 编写程序,使用序列解包交换三个变量的值
- 编写程序,使用海象运算符找出列表中所有大于平均值的元素
- 编写程序,统计输入字符串中各字符的出现次数
- 编写程序,模拟简单的银行账户操作(存款、取款、计算利息)
提示:赋值运算符是编程的基础,熟练掌握各种赋值方式和增强赋值运算符可以大大简化代码!