
python 链式赋值机制解读
刚接触 python 的编程新手常常被链式赋值操作搞得一头雾水。例如:
a, b, c = b, c, a = c, b, a = 1, 2, 3 print(a, b, c)
令人惊讶的是,代码输出结果并非 (1, 2, 3),而是 (3, 2, 1)。本文将深入剖析 python 中链式赋值的机制,解答这一令人困惑的问题。
python 中的赋值顺序
立即学习“Python免费学习笔记(深入)”;
不同于 c 语言,python 中的赋值是从右往左进行的。也就是说,在上述代码中,首先赋值给最右边的变量 a,然后再依次赋值给 b 和 c。
字节码解析
为了更直观地理解代码执行过程,我们可以使用 dis 模块查看字节码:
$ python -m dis ./main.py
1 0 LOAD_CONST 0 ((1, 2, 3))
2 DUP_TOP
4 UNPACK_SEQUENCE 3
6 STORE_NAME 0 (a)
8 STORE_NAME 1 (b)
10 STORE_NAME 2 (c)
12 DUP_TOP
14 UNPACK_SEQUENCE 3
16 STORE_NAME 1 (b)
18 STORE_NAME 2 (c)
20 STORE_NAME 0 (a)
22 UNPACK_SEQUENCE 3
24 STORE_NAME 2 (c)
26 STORE_NAME 1 (b)
28 STORE_NAME 0 (a)
2 30 LOAD_NAME 3 (print)
32 LOAD_NAME 0 (a)
34 LOAD_NAME 1 (b)
36 LOAD_NAME 2 (c)
38 CALL_FUNCTION 3
40 POP_TOP
42 LOAD_CONST 1 (None)
44 RETURN_VALUE字节码中,dup_top 指令用于复制栈顶元素。unpack_sequence 指令用于将序列(如元组)解包并将其元素压入栈中。
执行过程
结论
简而言之,python 中链式赋值是 从右往左赋值 的,并且每个赋值操作都会覆盖前面的赋值结果。最终输出的结果反映了最后一个赋值操作的作用。
以上就是Python 链式赋值:为什么代码输出 (3, 2, 1) 而不是 (1, 2, 3)?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号