第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 100

2.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 = 10

2.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 3

3. 增强赋值运算符

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)  # 输出:15

3.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.5

3.5 整除赋值(//=)

# 数字整除
num = 10
num //= 3  # 等价于 num = num // 3
print(num)  # 输出:3

num = 10
num //= 2
print(num)  # 输出:5

3.6 取余赋值(%=)

# 数字取余
num = 10
num %= 3  # 等价于 num = num % 3
print(num)  # 输出:1

num = 10
num %= 2
print(num)  # 输出:0

3.7 幂赋值(**=)

# 数字幂运算
num = 2
num **= 3  # 等价于 num = num ** 3
print(num)  # 输出:8

num = 5
num **= 2
print(num)  # 输出:25

4. 特殊赋值运算符

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}")  # 输出:150

5.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)  # 输出:helo

5.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:
    pass

7.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.5

8.2 使用增强赋值运算符简化代码

# 传统写法
count = count + 1
total = total + num

# 推荐写法
count += 1
total += num

8.3 链式赋值和多重赋值

# 链式赋值(所有变量指向同一个对象)
a = b = c = []
a.append(1)
print(b)  # 输出:[1](b也改变了)

# 多重赋值(创建不同的对象)
a, b, c = [], [], []
a.append(1)
print(b)  # 输出:[](b没有改变)

9. 本集总结

本集我们学习了:

  • 简单赋值运算符的使用
  • 多重赋值和序列解包
  • 各种增强赋值运算符(+=, -=, *=, /=, //=, %=, **=)
  • 海象运算符(:=)的使用
  • 位运算赋值运算符
  • 变量作用域(global和nonlocal)
  • 多个实际应用示例
  • 赋值运算符的最佳实践

核心要点

  1. 赋值运算符用于将值赋给变量
  2. 增强赋值运算符可以简化代码
  3. 序列解包可以方便地同时给多个变量赋值
  4. 海象运算符可以在表达式中赋值(Python 3.8+)
  5. 注意变量作用域,使用global和nonlocal关键字
  6. 赋值和相等是不同的(= vs ==)
  7. 使用有意义的变量名提高代码可读性

下一集预告:我们将学习运算符优先级,了解不同运算符的执行顺序。

10. 课后练习

  1. 编写程序,使用增强赋值运算符计算1到100的和
  2. 编写程序,使用序列解包交换三个变量的值
  3. 编写程序,使用海象运算符找出列表中所有大于平均值的元素
  4. 编写程序,统计输入字符串中各字符的出现次数
  5. 编写程序,模拟简单的银行账户操作(存款、取款、计算利息)

提示:赋值运算符是编程的基础,熟练掌握各种赋值方式和增强赋值运算符可以大大简化代码!

« 上一篇 逻辑运算符 下一篇 » 运算符优先级