4.2 赋值
Python的赋值语句拥有极大的魅力,在上节中,通过对程序控制结构相关例题的学习,我们已经大致了解了如何对变量进行赋值。然而,Python赋值方式并不仅仅局限于此,另有多种不同的赋值语句。从实际需要解决的问题出发,具体问题具体分析,选择合适的赋值语句,将会使Python编程更加流畅,起到事半功倍的效果。
基础赋值语句如表2.2.x
i=100
元素赋值
为元素i赋值数值100
i+=1
增量赋值
数值i自增1,相当于i=i+1
hust, zzu=100, ‘zzuer’
元组赋值
分别为hust和zzu赋值数值100和字符串’zzuer’
[hust, zzu]=[‘huster’, 100]
列表赋值
分别为hust和zzu赋值字符串’huster’和数值100
a, b, c, d, e, f=’huster’
推广的序列赋值
分别为a, b, c, e, f, g赋值’h’, ‘u’, ‘s’, ‘t’, ‘e’, ‘r’
a, *b=’zzuer’
扩展序列解包
分别为a赋值z,b赋值zuer
a=b=c = ‘zzu’
多元赋值
为a,b,c赋同样值’zzu’
4.2.1 序列赋值
序列赋值,即将序列赋值给序列。在序列赋值过程中,Python会按照元素先后位置,对序列进行一次赋值。
4.2.2 交换赋值
我们对2.15节排序算法的学习中,初步掌握了如何交换两个变量的值。不同于其他语言,在交换两变量值时需要人工创建临时变量,用来存储中间值。如:交换变量a与b的值,可以使用第三个变量c来对a的值进行存储,然后将b值赋予a,c值赋予b。而在python语句中,仅仅使赋值号两边变量的位置不同,就可以完成变量值的交换。在元组赋值过程中,解释器会自动为右侧变量创建一个临时变量。
>>>a=1, b=2
>>>a, b= b, a
>>>a, b
(2, 1)
在赋值过程中,在赋值号左右侧序列长度相等的情况下,右侧可接受任何类型的序列。
>>>a, b, c, d, e, f=’huster’ #将字符串赋值给元组
a, b, c, d, e,f
(‘h’, ‘u’, ‘s’, ‘t’, ‘e’, ‘r’)
>>> [hust, zzu]=100, ‘zzuer’#将元组赋值给列表
>>>[hust, zzu]
[100, ‘zzuer’]
>>>a, b, c={1, ‘g’, 3} #将集合赋值给列表
>>>a, b, c
(1, 3, ‘g’)
虽然我们可以在赋值号左右混用不同类型的序列,但是当赋值号左右侧序列的长度不同时,解释器会报错。
>>>z, z, u= ‘zzuer’
Traceback (most recent call last):
File "<pyshell#31>", line 1, in <module>
z, z, u='zzuer'
ValueError: too many values to unpack (expected 3)
这时候,我们可以使用分片(详见,第四章基本数据类型)功能,来对左侧变量的接受的序列长度进行划分。
4.2.3 增量赋值
增量赋值语句是传统运算赋值语句的一种缩写。对于将变量i增加1,传统写法为i=i+1,增量赋值写法为i+=1。这两种不同写法在结果上是等价的。除了加法,增量赋值语句同时支持多种运算,如常规的加减乘除四则运算,逻辑运算,位运算,幂运算等。增量赋值语句由一个二元运算符和赋值号组成。
表2.2.x总结了常见的增量赋值语句。下列语句的执行结果全部赋给变量a。
a+=b( a-=b, a*=b,a/=b)
对a, b执行加法(减法,乘法,除法)运算
a%=b
对a执行模b取余运算
a^=b
对a,b执行异或(xor)运算
a<<=b(a>>=b)
对a, b执行左移(右移)位运算
a**=b
a的b次方
a//=b
a除以b的结果向下取整
a&=b(a|=b)
对a, b执行与(或)运算
4.2.4 多元赋值
多元赋值语句可以将赋值号右边对象一次赋值给左侧变量。
>>>a=b=c = ‘zzu’
>>>a, b, c
('zzu', 'zzu', 'zzu')
4.2.5 扩列解包
扩列解包语句使用带有星号的赋值目标变量如*x,来对右侧待赋值序列进行位置匹配。扩列解包语句的思想类似于通配符*。在实际操作中,*x能匹配到的序列的长度,取决于*x左右两边变量的个数。
设赋值号右侧序列的长度为, 对于赋值号左侧的待赋值变量*x, 假设*x左侧有个变量,右侧有个变量,那么*x的结果是一个由序列第位到第位个元素依次排列所组成的列表。
例
>>>a, b, *c, d =’huster’
>>>c
[‘s’, ‘t’, ‘e’]
在上例中,将’s’, ‘t’, ‘e’赋值给了列表c。
例
>>>lis=[1, 2, 3, 4]
>>>a, b, c, d, *e=lis
>>>a, b, c, d, e
(1, 2, 3, 4, [])
在上例中,因为*e左侧变量个数恰等于序列长度,因此e被赋值位空列表([])。
例
>>>lis=[1, 2, 3, 4, 5]
>>>a, b, c, d, *e=lis
>>>a, b, c, d, e
(1, 2, 3, 4, [5])
在上例中,*e匹配到的序列的末尾元素,因此e被赋值为仅有一个元素的列表([5])。
4.2.6 变量命名
命名规则
在python中,当给一个变量赋值时,这个变量就会存在(?)。变量的命名需要遵循如下规则:(汉字也ok,也可以做首字符)
变量名由任意数量的字母、数字和下划线组成,变量名首字符必须是下划线或字母。
python程序严格区分大小写,包括创建的名称和保留字。
禁止使用保留字。
表2.x列举了一些常见的保留字
class
定义类
if
条件语句。
exec
用于执行python语句
for
循环语句
finally
异常语句,出现异常后,是重要执行finally包含的代码块。
import
导包
return
返回计算结果
命名惯例
在进行命名时,除了要遵循前面所介绍的命名规则外,还需要遵循不同类型的变量的命名惯例,虽然打破这种惯例,不影响程序的运行,但是在实际应用中一般都会遵循,这样做的好处是可以增强代码的可读性。
类名称以大写字母开头
模块名称以小写字母开头
以单一下划线开头的名称(_X)不会被from module import *语句导入。
前后均有双下划线的名称(__X__)是系统定义的名称,对解释器有特殊意义。
以双下划线开头,但结尾没有双下划线的名称(__X)是外文类的本地(又称“重整“,mangle)变量。
通过交互式命令行运行时,只有单个下划线的名称(_)会保存最后一个表达式的结果。
Last updated
Was this helpful?