1.1 解压序列赋值给多个变量

任何的序列(或者是可迭代对象)可以通过一个简单的赋值语句解压并赋值给多个变量,唯一的前提就是变量的数量必须跟序列元素的数量是一样的


In [1]:
p = (1,2,3)

In [2]:
x,y,z = p

In [3]:
x


Out[3]:
1

In [4]:
y


Out[4]:
2

In [5]:
z


Out[5]:
3

In [6]:
da = [1,2,'a',p]

In [7]:
a,b,c,_ = da

In [8]:
a


Out[8]:
1

In [9]:
b


Out[9]:
2

In [10]:
c


Out[10]:
'a'

In [11]:
_


Out[11]:
'a'

这里本身我要输出(1,2,3 )但是在ipython中'_'自动识别成最新的(上一个值) 类似于matlab 中的ans

当然在python中这个多变量赋值字符串中也可以,任何迭代对象


In [12]:
s = 'acfun'

In [13]:
a,b,c,d,e = s

In [14]:
a


Out[14]:
'a'

In [15]:
e


Out[15]:
'n'

只要将两边的变量或赋值数对齐就可利用任何迭代对象

1.2 解压可迭代对象赋值给多个变量

Python的星号表达式可以用来解决这个问题:如果一个可迭代对象的元素个数超过变量个数时,会抛出一个 ValueError 。 那么怎样才能从这个可迭代对象中解压出N个元素出来?

其实这里* 表示python中的可变参数


In [20]:
record = ('maz',18,'13679259627','62627')

In [21]:
name,age,*tel = record


  File "<ipython-input-21-497c0736af56>", line 1
    name,age,*tel = record
             ^
SyntaxError: invalid syntax

In [22]:
len(record)


Out[22]:
4

In [23]:
name,age,*tel = record


  File "<ipython-input-23-497c0736af56>", line 1
    name,age,*tel = record
             ^
SyntaxError: invalid syntax

In [24]:
name,age,**tel = record


  File "<ipython-input-24-cae5c184b6ec>", line 1
    name,age,**tel = record
              ^
SyntaxError: invalid syntax

不科学啊,怎么星号没有用了


In [25]:
2**4


Out[25]:
16

In [26]:
*ta = record


  File "<ipython-input-26-098d7a660e04>", line 1
    *ta = record
    ^
SyntaxError: invalid syntax

好像在jupyter notebook中*针对的可变参数不行 在ipython中试试

这个是python 3的独有功能!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!