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?

ウォルラス演算子の使い方

Posted at

ウォルラス演算子とは

2019 年に Python 3.8 で追加された機能で、セイウチ演算子という愛称で親しまれている?らしいです。
変数名 := 式の記法で、値の代入と条件の判定を 1 行でできます。
かなり昔に追加された機能のようですが、ついさっき知ったので記事を書いてみようと思います。

コピーして動くサンプルコード

このクラスは数値の配列と閾値を渡して、各数値を 2 倍したとき、閾値を超えている数値の配列を返すものです。
ウォルラス演算子を使った場合と使わなかった場合で見比べられるようにしました。

test.py
class AboveThresholdDoubledNumbersExtractor:
    def __init__(self, numbers: list[int], threshold: int) -> None:
        self._numbers = numbers
        self._threshold = threshold

    def without_walrus_operator(self) -> list[int]:
        above_threshold = []

        for num in self._numbers:
            doubled_num = num * 2
            if doubled_num > self._threshold:
                above_threshold.append(doubled_num)
        return above_threshold

    def with_walrus_operator(self) -> list[int]:
        above_threshold = []

        for num in self._numbers:
            if (doubled_num := num * 2) > self._threshold:
                above_threshold.append(doubled_num)
        return above_threshold

    def without_walrus_operator_in_list_comprehension(self) -> list[int]:
        return [num * 2 for num in self._numbers if num * 2 > self._threshold]

    def with_walrus_operator_in_list_comprehension(
        self,
    ) -> list[int]:
        return [
            doubled_num
            for num in self._numbers
            if (doubled_num := num * 2) > self._threshold
        ]


if __name__ == "__main__":
    nums = [10, 20, 30, 40, 50]
    threshold = 50
    extractor = AboveThresholdDoubledNumbersExtractor(nums, threshold)

    a = extractor.without_walrus_operator()
    b = extractor.with_walrus_operator()
    c = extractor.without_walrus_operator_in_list_comprehension()
    d = extractor.with_walrus_operator_in_list_comprehension()

    print(a)
    print(b)
    print(c)
    print(d)

感想

num * 2 程度であればその恩恵は感じられないのかもしれませんが、処理の結果に意味を持たせながら条件の判定もできるのは嬉しいです。
趣味の開発では可読性を損なわない範囲で積極的に使っていきたいですね。
セイウチ演算子を使うべきではないと思しき場面に直面したらこの記事を更新しようと思います。

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?