0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Pythonのセイウチ演算子(Walrus Operator)について徹底解説

Last updated at Posted at 2024-10-26

Pythonのセイウチ演算子(Walrus Operator)について徹底解説

Python 3.8から導入されたセイウチ演算子(:=)は、変数への代入を式の中で行うことができる新しい演算子です。この演算子は、コードの可読性を高め、冗長性を減らすために使用されます。

基本的な書き方

セイウチ演算子を使用する基本的な書き方は以下の通りです:

if (n := len(some_list)) > 0:
    print(f'リストの長さは {n} です。')

上記の例では、some_listの長さを変数nに代入し、その長さが0より大きい場合にメッセージを表示します。従来の方法では、次のように書く必要がありました:

n = len(some_list)
if n > 0:
    print(f'リストの長さは {n} です。')

よくある使用方法

1. ループ中での使用

セイウチ演算子は、ループ内での条件チェックに便利です。以下の例では、リスト内の要素を処理しつつ、その数を把握できます:

while (n := len(queue)) > 0:
    item = queue.pop()
    print(f'処理したアイテム: {item} (残り {n-1})')

2. リスト内包表記での使用

リスト内包表記でもセイウチ演算子を用いることができます。次の例は、2倍の値を持つ数のリストを作成します:

values = [1, 2, 3, 4]
result = [double for value in values if (double := value * 2) > 5]
print(result)  # [6, 8]

実用的な使用方法

1. マルチ行のコンテキスト管理

セイウチ演算子を用いて、複数の行にわたるコンテキストを管理することができます。以下は、ファイルを開く際に使用される例です:

with open('data.txt') as f:
    if (data := f.read()):
        print(f'ファイルの内容: {data}')

2. 無限ループ処理

従来の方法では次のように書かれていました

while True:
    result = judge()
    if result:
        break
    print(f'判定結果: {result}')

セイウチ演算子を使うことで、resultの代入と判定を1行でまとめられ、よりシンプルで直感的なコードになります。

while (result := judge()) is not True:
    # 処理
    print(f'判定結果: {result}')

print('ループを終了しました。')
  • judge()関数の結果をresultに代入し、その値がTrueでなければループを続行します。
  • セイウチ演算子により、judge()の呼び出しが1回で済み、無駄な再計算を避けられます。
  • 終了条件が満たされた場合にprintを使って確認することで、実行結果を見やすくしています。

まとめ

セイウチ演算子は、Pythonのコードをより簡潔に、美しくする強力な機能です。さまざまなシーンで応用できますので、実際のプロジェクトで積極的に使用してみてください。

セイウチ演算子を使うことで、条件付きでの代入が可能になり、冗長なコードを削減できます。今後のPythonプロジェクトで、ぜひ活用してみてください!

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?