您的位置:首页 > 编程语言 > Python开发

(5) Python 语句和语法 –- 赋值

2016-02-19 22:01 639 查看
概  述:赋值语句是编程世界里最常见的语句。在Python中,拥有一些其他语言不具有的赋值技巧。

 

1 赋值的基本形式

Python语句赋值的基本形式是:

在等号的左边写赋值语句的目标;在等式的右边写要赋值的对象。左侧的目标可以是变量名或对象元素,而右侧的对象可以是任何会计算得到的对象的表达式。需要注意:
赋值语句建立对象的引用值。Python赋值语句会把对象的引用值存储在变量名或数据结构的元素内。
变量名在首次赋值时会被创建。
<
4000
span style="background-color:inherit;font-family:'宋体';">变量名在引用前必须先赋值
隐式赋值语句:import、from、def、class、for、函数参数。

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
>>> # 基本赋值
... name = ['hinata','Naruto','XLX']
>>> name 
['hinata', 'Naruto', 'XLX']
>>> # (1) 赋值语句建立对象的引用值。
... name2 = name
>>> name[0] = 'nici'
>>> name
['nici', 'Naruto', 'XLX']
>>> name2
['nici', 'Naruto', 'XLX']
>>> # 变量名在首次赋值时会被创建。
... # 变量名在引用前必须先赋值
... name = name3
Traceback (most recent call last):
  File "<stdin>", line 3, in <module>
NameError: name 'name3' is not defined
 

说明:
赋值语句建立对象的引用值。 上述代码中,修改了name,name2的值随之改变。
变量名在引用前必须先赋值。 上述代码中,name3没被赋值就被引用,所以报”not
defined”错误。

 

 

2 序列赋值

    序列赋值可以多个赋值操作同时进行,也可以交换或者多个变量的值。
1
2
3
4
5
6
>>> x,y,z = 1,2,3
>>> print x,y,z
1 2 3
>>> x,y = y,x
>>> print x,y,z
2 1 3
 

    上述的做法实际上是叫做序列解包或者递归解包。形象表示如下;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
>>> values = 1,2,3
>>> values
(1, 2, 3)
>>> x,y,z = values
>>> print x,y,z
1 2 3
>>> a,b,c = 'ABC'
>>> print a,b,c
A B C
>>> scoundrel = {'name':'hinata','age':16}
>>> key,value = scoundrel.popitem()
>>> key
'age'
>>> value
16
 

注意:

    所解包的序列中的元素数量必须和放置在赋值符号=左边的变量数量完全一致,否则python会在赋值时引发异常。
1
2
3
4
5
6
7
8
>>> x,y = (1,2,3)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: too many values to unpack
>>> x,y,z = 1,2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: need more than 2 values to unpack
 

 

3 链式赋值

链式赋值是将同一值赋值给多个变量的途径。
1
2
3
4
5
6
>>> a=b=1
>>> a,b
(1, 1)
>>> b = b + 1
>>> a,b
(1, 2)
 

注意,若变量a和变量b是引用变量时,需要额外小心。
1
2
3
4
5
6
>>> a=b=[]
>>> a,b
([], [])
>>> a.append('Hinata')
>>> a,b
(['Hinata'], ['Hinata'])
 

这时,我们需要单独赋值。
1
2
3
4
5
>>> a = []
>>> b = []
>>> a.append('Hinata')
>>> a,b
(['Hinata'], [])
 

4 增量赋值

将 X = X + Y 写成 X
+= Y 的形式,就是增量赋值。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
>>> X = 1
>>> Y = 2
>>> X += Y
>>> X
3
>>> X &= Y
>>> X
2
>>> X //= Y
>>> X
1
>>> X **= Y
>>> X
1
 

增强赋值语句的优点
左侧只需计算一次。 在 X
+= Y中,X出现一次,则只需计算一次。而在完整形式X
= X + Y 中,X出现两次,则必须执行两次。因此,增强赋值语句通常执行得更快。
优化技术会自动选择。对于支持原处修改的对象而言,增强形式会自动执行原处的修改运算,而不是相比来说速度更慢的复制。

 

注意:对于’+=’,通常隐含的意思是:对列表是做原处修改的意思。其完全不像’+’合并,总是生成新的对象。如下面代码所示:

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
>>> L = [1,2]
>>> M = L
>>> L = L + [3,4]
>>> L,M
([1, 2, 3, 4], [1, 2])
>>> 
>>> L = [1,2]
>>> M = L
>>> L += [3,4]
>>> L,M
([1, 2, 3, 4], [1, 2, 3, 4])
>>> 
>>> L = [1,2]
>>> M = L
>>> L.append(3)
>>> L,M
([1, 2, 3], [1, 2, 3])
>>> 
>>> 
>>> L = [1,2]
>>> M = L
>>> L.extend([3,4])
>>> L,M
([1, 2, 3, 4], [1, 2, 3, 4])
 

注意:由于字符串是不可变类型,所以’+=’对于字符串没有上述的效果。
1
2
3
4
5
6
7
8
9
10
11
12
>>> L = 'I'
>>> M = L
>>> L = L + ' Love'
>>> L,M
('I Love', 'I')
>>> 
>>> 
>>> L = 'I Love'
>>> M = L
>>> L += ' YOU'
>>> L,M
('I Love YOU', 'I Love')
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python