- Python 3.7从入门到精通(视频教学版)
- 王英英
- 1362字
- 2021-04-02 20:44:55
5.3 多样的赋值语句
赋值语句是Python程序中常用的语句。因为经常需要大量的变量存储程序中用到的数据,所以用来对变量进行赋值的赋值语句也会在程序中大量出现。
5.3.1 基本赋值
赋值的作用是赋予变量的值,使之能够参与运算。比如x只是一个字母(变量),不能进行加、减、乘、除的运算,如果给它赋予100的值,就可以参与运算了。
赋值语句的语法格式如下:
变量名=表达式
其中,“=”为赋值号,编程中的等于号为“==”。
Python中的变量不需要声明。每个变量在使用之前都必须赋值,赋值后该变量才会被创建。在Python中,变量没有类型,所说的“类型”是指内存中对象的类型。
例如:
aa="刘笑笑" bb=false cc="临别亦听得到你讲再见,在有生的瞬间能遇到你"
注意 赋值不是直接将一个值赋给一个变量,对象是通过引用传递的。不管变量是新创建的、还是已经存在的,都是将该对象的引用赋值给变量。
C语言中,把赋值语句当作一个表达式,可以返回值。但在Python中,赋值语句不会返回值,所以下面的语句是非法的:
>>>b = (a = a - 100) >>>if (b = 100)
运行结果如图5-4所示。此时报出语法错误,可见上述赋值方法都是错误的。
![](https://epubservercos.yuewen.com/5D8A8A/17035792904285406/epubprivate/OEBPS/Images/Figure-P99_9440.jpg?sign=1739412207-sENFr03xLg61AMNrHcpNBEvJ81UODRGM-0-0181a881439ee2521fb0f75cd6ad394e)
图5-4 运行结果
提示 经常有读者将“==”符号误写成“=”。“=”是赋值运算符,“==”是关系运算符的“等于号”,两者是不同的,千万不能混淆。
5.3.2 序列解包
由于赋值运算符的结合性是由右至左,因此在Python语言中,可以一次性给多个变量同时赋值。例如:
![](https://epubservercos.yuewen.com/5D8A8A/17035792904285406/epubprivate/OEBPS/Images/Figure-P100_57292.jpg?sign=1739412207-FUPEsGhNPTYEpRwhusbx8UP9Vu6crZui-0-1bed32f5549bfa0267a286ff8c97eddf)
运行结果如图5-5所示。从运行结果看出,多个赋值操作可以同时进行。
![](https://epubservercos.yuewen.com/5D8A8A/17035792904285406/epubprivate/OEBPS/Images/Figure-P100_9493.jpg?sign=1739412207-ai5l9PRD7bSDoFzfiPsO3nsehKxdPJXy-0-90b70a8d97fb50ea26e8b4108b601e52)
图5-5 运行结果
当遇到多个变量赋值时,就不需要逐次对每个变量进行赋值了,用一条语句就可以解决。例如:
![](https://epubservercos.yuewen.com/5D8A8A/17035792904285406/epubprivate/OEBPS/Images/Figure-P100_57293.jpg?sign=1739412207-ckaILaNsOXZjcNwOqFleNTTzmHEC36aO-0-1c1398b9b9cb105c226f51b9979b92b3)
运行结果如图5-6所示。从运行结果看出,x和y的值交换了,所以可以交换两个或多个变量的值。
![](https://epubservercos.yuewen.com/5D8A8A/17035792904285406/epubprivate/OEBPS/Images/Figure-P100_9524.jpg?sign=1739412207-rgqgdR1PKQiObJZb3jv8uSZXkSYg2DGa-0-2d7e2e93501b916f14d5c2bc166eb302)
图5-6 运行结果
在Python中,上述交换就是序列解包,即先将多个值的序列解开,然后放到变量序列中。例如:
![](https://epubservercos.yuewen.com/5D8A8A/17035792904285406/epubprivate/OEBPS/Images/Figure-P100_57294.jpg?sign=1739412207-BvvRvodulwj8wNCFMaVeBIHC3mQE8VI9-0-be49f4e1a001fcf72db81979d5bb2477)
运行结果如图5-7所示。列表解包后,变量获得了对应的值。
![](https://epubservercos.yuewen.com/5D8A8A/17035792904285406/epubprivate/OEBPS/Images/Figure-P101_9575.jpg?sign=1739412207-P0i2p1nIz8uMijDjtWFw9SfACHZlU6Wj-0-2317bf205c133a594a965fdc453e8675)
图5-7 运行结果
需要特别注意的是,解包序列中的元素数量必须与放置在赋值符号左边的数量完全一致,否则会在赋值时引发异常。例如:
![](https://epubservercos.yuewen.com/5D8A8A/17035792904285406/epubprivate/OEBPS/Images/Figure-P101_57295.jpg?sign=1739412207-VxgQ871Hjs3bxVWKaI4tB3cMch6XyFJ1-0-90a9b032ae75adf2ec47a5046a8a9c6d)
运行结果如图5-8所示。当左边的元素数量与右边的元素数量不一致时,执行会报错。
![](https://epubservercos.yuewen.com/5D8A8A/17035792904285406/epubprivate/OEBPS/Images/Figure-P101_9611.jpg?sign=1739412207-fIf77srzCu9zZjw4KLMZtjLhy7PuvUaH-0-e9a99ea57eb9199c833a235145c1ac27)
图5-8 运行结果
5.3.3 链式赋值
链式赋值是将同一个值赋给多个变量,即可以一次性为不同的变量赋予同一个值。例如:
![](https://epubservercos.yuewen.com/5D8A8A/17035792904285406/epubprivate/OEBPS/Images/Figure-P101_57296.jpg?sign=1739412207-MI5wZHujfS1YbQfEjoKkfwnzzJQNCts7-0-15112642b75cdd5eb467b55fcd434d70)
运行结果如图5-9所示。通过多个等式可以为多个变量赋同一个值。
![](https://epubservercos.yuewen.com/5D8A8A/17035792904285406/epubprivate/OEBPS/Images/Figure-P101_9636.jpg?sign=1739412207-6ZcFvTyFh5XHNPqyk0q2j57OuGpPCHFM-0-9dc8a7da4241f1af03b2c204d088501c)
图5-9 运行结果
上面示例的运行结效果与分别赋值是一样的。例如:
![](https://epubservercos.yuewen.com/5D8A8A/17035792904285406/epubprivate/OEBPS/Images/Figure-P101_57297.jpg?sign=1739412207-njZxgHmR107aZh6iCdm0qEyU4SYtYWgG-0-ca2a2aa34b54d93cc6dbee72dbf8eddc)
运行结果如图5-10所示。分别赋值和使用链式赋值结果是一样的,但链式赋值更简洁。
![](https://epubservercos.yuewen.com/5D8A8A/17035792904285406/epubprivate/OEBPS/Images/Figure-P102_9679.jpg?sign=1739412207-Bpfe3I5UiCE2Aqt5HCB4g0FWy2nJZwRq-0-7f9e4d183cc3a33dc191049a7b52cebb)
图5-10 运行结果
5.3.4 其他赋值方式
赋值运算符也可以是一些复合的赋值运算符,如加赋值运算符“+=”、减赋值运算符“-=”、乘赋值运算符“*。=”、除赋值运算符“/=”等。
表5-1中左侧的表达式等价于右边的表达式。
表5-1 左侧的表达式等价于右边的表达式
![](https://epubservercos.yuewen.com/5D8A8A/17035792904285406/epubprivate/OEBPS/Images/Figure-T102_57299.jpg?sign=1739412207-gFwRfRsk5VKjv0G9bXrNdzLx4pXLpYWd-0-0d4e95d4b74e0e738804ffee14d5cd5e)
例如:
![](https://epubservercos.yuewen.com/5D8A8A/17035792904285406/epubprivate/OEBPS/Images/Figure-P102_57298.jpg?sign=1739412207-hykJsH3opXBw9Vt7s83eYGf5ozNkS2Cz-0-1d4e91723ee7ca88cfaa3e1edaccfc0b)
运行结果如图5-11所示。从结果可以看出,使用复合赋值会更简洁。
![](https://epubservercos.yuewen.com/5D8A8A/17035792904285406/epubprivate/OEBPS/Images/Figure-P102_9775.jpg?sign=1739412207-rB1enVJnGY8Qd4RrPxswlWFX8O62lcL6-0-75a4d9b6d4187795856516a132627183)
图5-11 运行结果
赋值号的右边也可以是表达式。例如:
>>>a=100 >>>b=200 >>>c=a*2+b >>>d=a+b+c >>>d
运行结果如图5-12所示。从结果可以看出,这里先计算a*2+b的值,再赋给c,c的值为400,然后计算a+b+c的值,再赋给d,d的值为700。
![](https://epubservercos.yuewen.com/5D8A8A/17035792904285406/epubprivate/OEBPS/Images/Figure-P103_9826.jpg?sign=1739412207-MiNu9tAgJm9hD6UmxOgOuI7eqv9aysMy-0-91d2c214bade012b53640c9e4947f7fe)
图5-12 运行结果
下面通过一个综合示例来学习各种赋值语句的使用方法。
【例5.1】多种方式的赋值(源代码\ch05\5.1.py)。
![](https://epubservercos.yuewen.com/5D8A8A/17035792904285406/epubprivate/OEBPS/Images/Figure-P103_57308.jpg?sign=1739412207-yVBARfMXygZs7eAMrUe9b8tiJrTCCk9E-0-eb8f393afbe79483dab053ae8b5bbf0e)
保存并运行程序,结果如图5-13所示。
![](https://epubservercos.yuewen.com/5D8A8A/17035792904285406/epubprivate/OEBPS/Images/Figure-P103_9904.jpg?sign=1739412207-8taiZX26vhDdyFvwAtOZ4XTnOIWuvG3j-0-1c6e7a2eaf044166018b16f83b77e5d6)
图5-13 运行结果
在Python语言中,同一变量名在不同阶段可以存储不同类型的数据。例如:
>>>a=3 >>>a >>>a='迢迢牵牛星,皎皎河汉女。' >>>a >>>a=10.88 >>>a
运行结果如图5-14所示。
![](https://epubservercos.yuewen.com/5D8A8A/17035792904285406/epubprivate/OEBPS/Images/Figure-P103_9952.jpg?sign=1739412207-l7UmjoTMg7OZvBv5zXFg8JkVykgvu4Rw-0-b7539739e9c83f3da18ae2e35f08a9a4)
图5-14 运行结果