94
65

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

セイウチ演算子って何?

Last updated at Posted at 2019-10-17

#目的
友人からPython3.8で「セイウチ演算子」なるものが導入されたと聞いたのでまとめてみる

#セイウチ演算子とは

:=

イコールの前にコロンをつけた演算子
横向きに見るとセイウチの顔っぽく見えるから…らしい
英語ではWalrus operator
Walrusはセイウチの意

#動作
__変数への代入__と__変数の使用__を同時に行える

(n := len(array)) > 4

とするとnに値(arrayの長さ)を代入しつつ4と比較することができる
代入されているのでそのあとにnを使うことも可能
主に見やすさを高めるために使う

#どんな時に使う?
##リストで使う
例えばリストの長さで条件分岐して、そのあとリストの長さを使いたいとき

array = [1,2,3,4,5,6,7]
if len(array) > 5:
    print(len(array))
#7

len()を2回呼び出さなくてはいけない
まどろっこしいので一回で済ませたいときにセイウチ演算子を使う

array = [1,2,3,4,5,6,7]
if (n := len(array)) > 5:
    print(n)
#7

ちょっとすっきり書けるようになる

##ファイル読み込みで使う
ファイル読み込みはかなりすっきり書くことが可能
一行ずつ読み込む場合にはwhileでreadline()を回すことが多い
さっきと同じようにreadline()が2回出てきてまどろっこしい

f = open("sample.txt")
text = f.readline()
while text:
    #何らかの処理
    print(text)
    text = f.readline()

これを以下のようにすっきり書ける

f = open("sample.txt")
while text := f.readline():
    #何らかの処理
    print(text)

#注意点
代入して比較する際にはセイウチ演算子の範囲をかっこで囲む必要あり

if (n := 5) > 4:
    pass
print(n)
#5

if m := 5 > 4:
    pass
print(m)
#True

下の例では5>4の結果が代入されてしまった模様
値を後で使いたいならかっこで囲むべし

#まとめ
見やすさを高めるために使うもの
慣れるまでは少し時間がかかりそう
使いたいのであればPythonのバージョンを上げよう

#参考文献
リリースノート What's New In Python 3.8
https://docs.python.org/ja/3.8/whatsnew/3.8.html#new-features

Python3.8の新機能 | Yakst
https://yakst.com/ja/posts/5567

94
65
3

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
94
65

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?