python中赋值语句的特点和形式
1. 赋值语句的特点
- 赋值语句创建对象的引用:赋值语句总是创建对象的引用,而不是复制对象。因此,Python中的变量更像是指针,而不是数据储存区域。
- 变量在首次赋值时会被创建:因此不需要提前声明变量。
- 变量在引用前必须先赋值:如果引用未赋值的变量会报错
2. 赋值语句的形式
(1. 普通形式
>>> a = 'abc' # 普通形式 >>> b = 123 >>> c = [1, 2, 3]
(2. 序列赋值
python中"="的右侧可以接受任意类型的序列,也可以是可迭代的对象,只要长度等于左侧序列即可。
>>> (a, b) = ('1', '2') # 元组赋值,括号可省略 >>> [a, b] = ['1', '2'] # 列表赋值 >>> a, b, c, d = 'spam' # 字符串序列赋值 # python中交换两个变量的值可以不用穿件第三个临时变量 >>> x, y = 1, 2 >>> x, y = y, x >>> x, y (2, 1) # 当等号左侧与右侧变量长度不一致时,考虑用分片解决 >>> num = '123' >>> a, b = num[:1], num[1:] >>> a, b ('1', '23') >>> num = '123' >>> a, b = list(num[:1]) + [num[1:]] >>> a, b ('1', '23') # 嵌套赋值 >>> ((a, b), c) = ('12','3') >>> a, b, c ('1', '2', '3')
3.扩展序列解包(*)
*X
:序列赋值时,带有*的名称会被赋值一个列表,该列表收集序列中剩下的没被赋值给其他名称的所有项,可用于=左右两侧变量数目不同的情况。
>>> num = [1, 2, 3, 4] >>> a, b = num # 变量个数不同会报错 Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: too many values to unpack (expected 2) >>> a, *b = num # 扩展序列解包 >>> a, b (1, [2, 3, 4]) >>> first, *mid, last = num # 扩展序列解包的*可以出现在任何位置 >>> first, mid, last (1, [2, 3], 4)
边界情况(特殊情况)(1. 带星号的名称值匹配到单个项,但仍然返回一个列表
>>> a = [1, 2, 3, 4] >>> b, c, d, *e = a >>> (b, c, d, e) (1, 2, 3, [4])
(2. 若带星号的名称不能匹配到任何项,则返回一个空列表
>>> a = [1, 2, 3, 4] >>> b, c, d, e, *f = a >>> (b, c, d, e, f) (1, 2, 3, 4, [])
(3. 若用了多个带星号的名称则会报错
>>> a = [1, 2, 3, 4] >>> *b, c, *d = a File "<stdin>", line 1 SyntaxError: two starred expressions in assignment
(4. 带星号的名称没有被编写到一个列表中会报错
>>> a = [1, 2, 3, 4] >>> *b = a File "<stdin>", line 1 SyntaxError: starred assignment target must be in a list or tuple >>> *b, = a >>> b [1, 2, 3, 4]
4. 多目标赋值(连续赋值)
多目标赋值即将最右侧的对象依次赋值给左侧所有的名称。
>>> a = b = c = 0 >>> (a, b, c) (0, 0, 0)
多目标赋值的共享引用问题
多目标赋值其实是多个目标对同一个内存空间的引用,这里要分两种情况,当被引用对象是不可变对象时则不存在问题;但是如果多目标都引用了同一个可变对象,则会出现问题
>>> a = b = 1 >>> (a, b) (1, 1) >>> b = 2 >>> (a, b) (1, 2) # a的值没有因为b的改变而改变 #学习中遇到问题没人解答?小编创建了一个Python学习交流群:711312441 >>> a = b = [1, 2] >>> (a, b) ([1, 2], [1, 2]) >>> b[1] = 3 >>> (a, b) ([1, 3], [1, 3]) # a的值随着b值得改变而改变,即使没有主动给a赋值,这是因为a,b同时引用了一个可变对象,改变该对象则会通知改变a和b的值
到此这篇关于python中赋值语句教程的文章就介绍到这了,更多相关python赋值语句内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
探索Python int()函数传入中文或者字符串会发生什么
这篇文章主要为大家介绍了Python int()函数传入中文或者字符串会发生什么,详细讨论int()函数的常规使用以及它如何处理异常输入,特别是涉及字符串和中文字符的情况2024-01-01使用Python通过oBIX协议访问Niagara数据的示例
这篇文章主要介绍了使用Python通过oBIX协议访问Niagara数据的示例,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下2020-12-12python代码检查工具pylint 让你的python更规范
遇到一个新的问题,总是离不开3W原则(What,Why,hoW),下面是对python代码静态检测工具pylint的学习2012-09-09
最新评论