Last Updated: 2/6/2024, 5:44:57 AM

# 代入の色々な書き方

# 基本となる代入の書き方
a = 1

# 2つ以上の変数に同じオブジェクトを代入

#
a = b = c = 1

# 変数の入れ替え

#
a = "Hello"
b = "こんにちは"
a, b = b, a

a  # "こんにちは"
b  # "Hello"

# 2つ以上の変数に異なるオブジェクトを代入

# ◯ セミコロンで区切って代入文を書く

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

# 代入とはなにか?

以下の記事では、代入のより詳しい動作について、図を使って説明させていただきました。