python 解包_【源码解析】python解包操作一文完全理解

解包是如何操作?>>> a, b = [1, 2]# 以下为此解包操作的字节码0 LOAD_CONST 1 (1)2 LOAD_CONST 2 (2)4 BUILD_LIST 26 UNPACK_SEQUENCE 28 STORE_FAST 0 (a)...
摘要由CSDN通过智能技术生成

解包是如何操作?

>>> a, b = [1, 2]

# 以下为此解包操作的字节码

0 LOAD_CONST 1 (1)

2 LOAD_CONST 2 (2)

4 BUILD_LIST 2

6 UNPACK_SEQUENCE 2

8 STORE_FAST 0 (a)

10 STORE_FAST 1 (b)

核心操作很明显是UNPACK_SEQUENCE所以我们称这个过程为解包

大致功能为 把栈顶元素打包成单独的计数值,然后再把这些值从右到左放入堆栈中

在源码中的实现为

// 源码版本为3.7.4

// ceval.c

TARGET(UNPACK_SEQUENCE) {

PyObject *seq = POP(), *item, **items;

if (PyTuple_CheckExact(seq) &&

PyTuple_GET_SIZE(seq) == oparg) {

items = ((PyTupleObject *)seq)->ob_item;

while (oparg--) {

item = items[oparg];

Py_INCREF(item);

PUSH(item);

}

} else if (PyList_CheckExact(seq) &&

PyList_GET_SIZE(seq) == oparg) {

items = ((PyListObject *)seq)->ob_item;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值