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

  述:赋值语句是编程世界里最常见的语句。Python中,拥有一些其他语言不具有的赋值技巧。

 

赋值的基本形式

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

在等号的左边写赋值语句的目标;在等式的右边写要赋值的对象。左侧的目标可以是变量名或对象元素,而右侧的对象可以是任何会计算得到的对象的表达式。需要注意:

  1. 赋值语句建立对象的引用值。Python赋值语句会把对象的引用值存储在变量名或数据结构的元素内。
  2. 变量名在首次赋值时会被创建。
  3. 变量名在引用前必须先赋值
  4. 隐式赋值语句:importfromdefclassfor、函数参数。

 

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

 

说明:

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

 

 

序列赋值

    序列赋值可以多个赋值操作同时进行,也可以交换或者多个变量的值。

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

 

 

链式赋值

链式赋值是将同一值赋值给多个变量的途径。

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'], [])

 

增量赋值

 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

 

增强赋值语句的优点

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

 

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

 

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')

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值