吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1062|回复: 17
收起左侧

[讨论] 请教python:[a] = a 的原理

  [复制链接]
wkdxz 发表于 2022-11-26 10:21
本帖最后由 wkdxz 于 2022-11-26 10:27 编辑

今天逛其他论坛,遇到这样的用法,之前一直没用过,看起来似懂非懂。
请懂的兄弟帮看下,是什么操作(个人感觉像是解包,但又没听谁讲过类似方法)

A代码

a = [['X', 'Y', 'Z']]
[a] = a
print(a)

A输出

 ['X', 'Y', 'Z']

以上是我见到的写法

而我常用的写法是下面这样

def allToList(ls):
    bigList = []
    for i in ls:
        if isinstance(i, (list, tuple)):
            bigList.extend(i)
        else:
            bigList.append(i)
    return bigList

a = [['X', 'Y', 'Z'], [1, 2, 3], 4, 5, (9, 1)]

print(allToList(a))

输出

['X', 'Y', 'Z', 1, 2, 3, 4, 5, 9, 1]

结语:

虽然A代码的写法只能处理一个列表,但确实很简洁啊,哪位兄弟知道原理,给讲解下呗
刚又试了,甚至可以这样写:

a = [[['X', 'Y', 'Z']]]
[[a]] = a
print(a)

简直是丧心病狂!!

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

paypojie 发表于 2022-11-26 10:33
这种写法 我没见过 感觉蛮新奇
sgbyg 发表于 2022-11-26 10:36
真正的多维数组长这样 ---> [['X', 'Y', 'Z'], ['123', 'sgbyg', '52pj']]
[['X', 'Y', 'Z']] 理论上还是一维数组
它的内容只有 ['X', 'Y', 'Z']这一个数组  所以赋值后的一维数组 内容只有['X', 'Y', 'Z']
jjl 发表于 2022-11-26 10:38
AiPoJie520 发表于 2022-11-26 10:46
感觉就像逆运算,[a]=[['1','2','3']],等号两边同时去掉[],得到a=['1', '2', '3']
知心 发表于 2022-11-26 10:53
外边的一层中括号抵消了。python的两个变量交换是不需要引入第三个变量的,你理解了这个,你问的你也就理解了
grekevin 发表于 2022-11-26 10:55
就是一种赋值方法,类似于javascript的解构赋值
 楼主| wkdxz 发表于 2022-11-26 10:58
知心 发表于 2022-11-26 10:53
外边的一层中括号抵消了。python的两个变量交换是不需要引入第三个变量的,你理解了这个,你问的你也就理解 ...

我也这样理解过,但感觉绕不通。解包倒是更像
lizy169 发表于 2022-11-26 11:24
谢谢!学习了
hrpzcf 发表于 2022-11-26 11:27
本帖最后由 hrpzcf 于 2022-11-26 11:28 编辑

[Python] 纯文本查看 复制代码
>>> import dis
>>> code = """a = [['X', 'Y', 'Z']]
[a] = a
"""
>>> dis.dis(code)
  1           0 LOAD_CONST               0 ('X')
              2 LOAD_CONST               1 ('Y')
              4 LOAD_CONST               2 ('Z')
              6 BUILD_LIST               3
              8 BUILD_LIST               1
             10 STORE_NAME               0 (a)

  2          12 LOAD_NAME                0 (a)
             14 UNPACK_SEQUENCE          1
             16 STORE_NAME               0 (a)
             18 LOAD_CONST               3 (None)
             20 RETURN_VALUE
>>> 


虽然看不太懂 Python 指令,但看到 UNPACK_SEQUENCE 名称明显是一条“解包序列”的指令

屏幕截图 2022-11-26 112813.png
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止回复与主题无关非技术内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-10 13:24

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表