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