赋值语句

赋值语句用于将名称绑定或重新绑定到特定值,以及修改属性或可变对象的成员项。

赋值语句使用赋值操作符和增强赋值操作符。详见 操作符概述。

# 将值 1 绑定到变量 a
a = 1
print('a =', a)
# 变量 a 重新绑定值 'a'
a = 'a'
print('a =', a)
a = 1
a = a

同时进行多个值多个名称绑定,值和名称数量要相等:

# 一个名称时,右边为元组
a = 1,2,3,4
a
(1, 2, 3, 4)
# 多个名称
a,b,c,d = 1,[2,3],4,5
f'a={a},b={b},c={c},d={d}'
'a=1,b=[2, 3],c=4,d=5'
# 可迭代对象拆包,则需要更多名称
a,b,c,d,e = 1,*[2,3],4,5
f'a={a},b={b},c={c},d={d},e={e}'
'a=1,b=2,c=3,d=4,e=5'

赋值一般左右两边一一对应 “同时” 赋值,但赋值给变量的多项集时可能不一样(例如列表的某一项):

x = [0,1]
i = 0
i, x[i] = 1, 2 
f'x={x},i={i}'
'x=[0, 2],i=1'

修改属性或可变对象的成员项:

# 新增属性
class A:
    x = 1
a = A()

# 右边的 a.x 是访问类属性
# 左边的 a.x 是新增实例属性, 值为类属性值 + 1
a.x = a.x + 1 
a.x, A.x
(2, 1)
# 修改列表项
a = [1,2,3]
a[0] = [0,1]
a
[[0, 1], 2, 3]
# 修改或新增字典项
d = {'a':1}
d['a'] = 10
d['b'] = 2
d
{'a': 10, 'b': 2}

赋值操作符 =,可以进行连续赋值,绑定多个名称,但赋值语句非表达式语句,不能被求值,因此不能被括号包围或分隔:

a = b = c = 1
a,b,c
(1, 1, 1)
a = (b = c = 1)
  File "<ipython-input-40-5dae496e91ce>", line 1
    a = (b = c = 1)
           ^
SyntaxError: invalid syntax

不可变容器的增强赋值操作,是重新绑定对象;可变容器的增强赋值操作是增、删、改成员项:

s = '123'
print(id(s),s)
# 因为不可变,相当于新建了一个字符串 '1234' 重新绑定 s
s += '4' 
print(id(s),s)
2371959191728 123
2371959179632 1234
l = [1,2,3]
print(id(l),l)
# 可变,相当于在原列表 l 中增加元素 4
l += [4]
print(id(l),l)
2371958877312 [1, 2, 3]
2371958877312 [1, 2, 3, 4]
l = [1,2,3]
print(id(l),l)
l *= 0 # 清空列表
print(id(l),l)
2371958290048 [1, 2, 3]
2371958290048 []
s = {1,2,3}
print(id(s),s)
s |= {0}
print(id(s),s)
2371958464800 {1, 2, 3}
2371958464800 {0, 1, 2, 3}

带标注的赋值语句。单个语句中将变量或属性标注和可选的赋值语句合为一体。标注对提高代码的可读性非常有用,看标注而不需要看代码上下文就大概知道代码的使用。

# 标注函数参数的类型及默认值
def f(n:int=1):
    print('Hi'*n)
f(2)
HiHi
name: str = '小张'
name
'小张'