Java教程

序列解包与链式赋值

本文主要是介绍序列解包与链式赋值,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1.什么是序列解包?

将可迭代对象里面的值一个个解包,存储到一系列变量中
In [3]:
lis = [1,2,3]   # 列表解包
a,b,c=lis
print(a,b,c)
1 2 3
In [11]:
tupl = (1,2,3)  # 元组解包
a,b,c=tupl
print(a,b,c)
1 2 3
可以看到如果是字典,则只会取key,字典应该是以key为主
In [6]:
dic = {'name':3,'age':4} # 字典解包
a,b=dic
print(a,b)
name age
In [8]:
a,b='wo'  # 字符串解包
print(a,b)
w o
需要注意的是,序列中的元素个数要和变量的个数一一对应,否则会报错
In [12]:
a={1,3,4}
c,d=a

ValueError                                Traceback (most recent call last)
in
     1 a={1,3,4}
----> 2 c,d=a
ValueError: too many values to unpack (expected 2)
如何解决这个呢,多余的值可以用_号来接收,会将值通过_号放到一个列表里面
In [14]:
a={1,3,4}
c,d=a  # 相当于一个列表的容器
print(d)
[3, 4]
In [17]:
a={1,3,4}
c,
d=a
In [18]:
*d
 File "", line 4
SyntaxError: can't use starred expression here
In [20]:
x=3100
y=3100
print(id(x))
print(id(y))
62574528
62574512

2.链式赋值

定义:用于将多个变量关联到同一个值(内存),只涉及一个值
In [23]:
x=y=2100
print(id(x),id(y))
66842656 66842656
等价于【y=2100,x=y】# 将自己的引用给x
注意:和【x=2100,y=2100】不同,这个时候x和y的引用不是关联到同一个内存值,虽然值大小是一样的,这里面涉及到了小整数池的概念
【此处经常会作为面试题!!】
1.小整数池目的:节省内存,提高执行效率 自己的话来说:在我们编写代码的时候需要使用到一些常用的整数,如果没有小整数池,那么每次都需要去申请内存空间,这样就会导致影响效率,
为了避免因创建相同的值而重复申请内存空间所带来的效率问题, Python解释器会在启动时创建出小 整数池,范围是[-5,256],该范围内的小整数对象是全局解释器范围内被重复使用,永远不会被垃圾回收机制回收。
2.另外创建变量的值如果相同的话,创建的时间间隔又比较短,那么他们的内存空间的值是相同的。
3.在pycharm中运行python程序时,pycharm出于对性能的考虑,会扩大小整数池的范围,其他的字符串等不可变类型也都包含在内一便采用相同的方式处理 了,我们只需要记住这是一种优化机制,至于范围到底多大,无需细究。
In [30]:
x=2580
y=2580
print(id(x))  # 时间间隔过短的情况下
print(id(x))
66843312
66843312

这篇关于序列解包与链式赋值的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!