変数に代入するとは?
変数の中にオブジェクトは入っていません。
# 基本となる代入の書き方
a = 1
#
a = b = c = 1
#
a = "Hello"
b = "こんにちは"
a, b = b, a
a # "こんにちは"
b # "Hello"
#
a = 0; b = 1; c = 2
# tuple 1
a, b, c = 0, 1, 2
# tuple 2
a, b, c = (0, 1, 2)
# list
a, b, c = [0, 1, 2]
# range
a, b, c = range(3)
# function
def f():
return 0, 1, 2
a, b, c = f()
# generator
a, b, c = (i for i in range(3))
# stdin
# 標準入力から 0, 1, 2 を入力
a, b, c = eval(input())
0, 1, 2
for 文の in の中に書けるものを右辺において複数同時に代入することができます。
ちなみに 0, 1, 2
も 関数 f
も tuple を生成しています。
>>> 0, 1, 2
(0, 1, 2)
>>>
>>> f()
(0, 1, 2)
>>>
括弧 () がなくても tuple なんですね。
>>> for i in 0, 1, 2: i
0
1
2
>>>
将来 Python 3.8 から代入式が使えるようになります。 2019/3/22 現在はまだ使えません。
a := 1
>>> # 値が返って来ます。
>>> a := 1
1
>>>
なにが嬉しいのかというと例えば...
# 1. いままでこのように書いていたものを
while True:
data = sock.recv(8192)
print("Received data: ", data)
if not data:
break
# 2. このように書けるようになります。
while data := sock.recv(8192):
print("Received data:", data)
以下の記事では、代入のより詳しい動作について、図を使って説明させていただきました。