Python赋值运算符详解:链式、参数、解包一网打尽!

赋值运算符是Python编程的基础,我们从第二章就开始使用它了。核心要点:赋值运算的执行顺序是从右向左。

举个栗子:

a = 3 + 4
print(a)  # 输出:7

执行过程:

  1. 先计算右边 3 + 4 得到结果 7
  2. 再将结果 7 存储到左边的变量 a 中。
    这就是典型的
    从右向左执行!

Python赋值运算符功能强大,支持三种高级用法:链式赋值参数赋值系列解包赋值。下面一一详解:


1. 链式赋值 (Chained Assignment)

功能: 用一行代码为多个变量赋予同一个值

i = a = b = c = 20  # 链式赋值

验证:

print(a, id(a))  # 输出: 20, 相同内存地址
print(b, id(b))  # 输出: 20, 相同内存地址
print(c, id(c))  # 输出: 20, 相同内存地址

内存解析:

  • 只创建了一个值为 20 的整数对象(包含ID、类型int、值20)。
  • 变量 i, a, b, c 都指向同一个内存地址(存储同一个对象的ID)。
  • 本质是多个引用指向同一个对象

2. 参数赋值 (Augmented Assignment / Compound Assignment)

功能: 将运算和赋值合并,简洁高效!包括:+=, -=, *=, /=, //=, %= 等。

工作原理:

a = 20
a += 30    # 等价于 a = a + 30
print(a)   # 输出: 50

a -= 10    # 等价于 a = a - 10
print(a)   # 输出: 40

a *= 2     # 等价于 a = a * 2
print(a)   # 输出: 80 (类型仍是int)

a /= 2     # 等价于 a = a / 2 (普通除法)
print(a)   # 输出: 40.0 (注意: 结果变为float类型!)

a //= 3    # 等价于 a = a // 3 (整除)
print(a)   # 输出: 13.0 (即使整除, 因a是float, 结果也是float)

a %= 3     # 等价于 a = a % 3 (取余)
print(a)   # 输出: 1.0

关键点:

  • a op= b 等价于 a = a op b
  • 操作可能改变变量类型(如 /= 可能产生 float)。

3. 系列解包赋值 (Sequence Unpacking Assignment)

功能: 用一行代码为多个变量赋予不同的值

基本用法:

a, b, c = 20, 30, 40  # 系列解包赋值
print(a, b, c)         # 输出: 20 30 40

执行顺序:

  1. 40 赋给 c
  2. 30 赋给 b
  3. 20 赋给 a

内存解析:

  • 右侧创建了 三个独立的对象 (20, 30, 40)。
  • 左侧变量 a, b, c 按顺序 分别指向这三个对象。

铁律:

  • 等号 左边的变量个数 必须与 右边的值的个数 严格相等!否则报错!
# 错误示例!变量少,值多!
a, b = 20, 30, 40  #  报错: ValueError: too many values to unpack (expected 2)



解包赋值的妙用:交换变量值

传统方法 (需中间变量):

temp = a
a = b
b = temp

Python 优雅解法 (一行搞定!):

a, b = 10, 20
print("交换前:", a, b)  # 输出: 10 20

a, b = b, a  # 核心!利用解包赋值交换值
print("交换后:", a, b)  # 输出: 20 10

原理:

  1. 右侧 b, a 会先计算,生成一个临时的元组 (20, 10)
  2. 然后解包赋值给左侧 a, b,即 a = 20, b = 10
    Python 的简洁强大,在此体现得淋漓尽致!

总结:
掌握
=(基础)、a=b=c(链式)、a += b(参数)、a, b = c, d(解包)这四种赋值形式,是写出高效、优雅 Python 代码的关键一步!尤其是解包赋值带来的变量交换功能,堪称 Python 语法糖的经典之作!

原文链接:,转发请注明来源!