python笔记 解构星号问题

389 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第9天,点击查看活动详情

0 环境

  • 编辑器:idea或vscode
  • 系统版本:windows10
  • python版本:3.9.6

1 前言

下面几个变体,更多关注是变量数量是否大于总元素个数,多星号,无星号的问题。

2 第五种

等号左边有两个或两个以上的*时,会报错,所以是不不行。

image.png

3 第六种

等号左边多个变量,包裹一个*xx变量,可行的。

lists = list(range(8))
head, second, third, *m, tail = lists
print("head: ", head)
print("second: ", second)
print("third: ", third)
print("m: ", m)
print("tail: ", tail)

image.png

4 第七种

当等号左边的变量总数高于右边len(列表)的长度时,会报错,所以不允许这么用。

image.png

5 第八种

当等号左边的变量总数低于右边len(列表)的长度时,等号左边变量中没有定义*xx变量,也会报错。

image.png

6 忽略点

比如我解构,head,*mid,tail,但是我的列表里只有2个元素,会有报错?星号的含义,为啥不可以只有它单独存在或者多个存在

列表里有两个元素,但是我有三个变量,先把值分给head和tail,没有带星号的变量内容就为空列表了。 image.png

当变量只有一个星号的情况下,比如*head = lists,按照我们的想法就是直接赋给它,但反过来想想,那我直接赋值或者用copy或者深拷贝,没必要在解构了呀,多此一举不是。当出现多个星号为啥不行,head,*mid,*mid1,星号解构剩余变量,但是现在两个星号,它们直接怎么分配列表个数呢,python怎么判断处理呢。