0
0

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

課題

Pythonでファイル読み取りを行いたくなった。

一行ずつwhileループでぶん回して読み込みたい。

line = file.readline()
while line:
    print(line)
    line = file.readline()

と、書くのは、なんだか野暮ったいので、もっとスマートに書けたらいいな。

課題の検討

C言語は下記みたいな感じにした覚えがある。

while (c = getchar()) {
    /* to do something */
}

よしじゃあ、こうしようと、以下のように書き、無事シンタックスエラーを引き起こしました。

while line = file.readline(): # <--- SyntaxError: invalid syntax. Maybe you meant '==' or ':=' instead of '='?
    print(line)

エラー文が教えてくれたのを試したら、動きました。

Python
- while line = file.readline(): # <--- SyntaxError: invalid syntax. Maybe you meant '==' or ':=' instead of '='?
+ while line := file.readline(): # <--- SyntaxError: invalid syntax. Maybe you meant '==' or ':=' instead of '='?
    print(line)

知らない演算子が出てきたので、調べてみると、:=は、セイウチ演算子、Walrus operatorというらしい。

これで代入すると、代入の結果を式として利用できるということで、C言語でやったようなことができるらしいです。

所感

おそらくC言語ベースでこのような動作を厳密に理解するなら、アセンブラレベルで考えないとならない雰囲気があるため、深入りはしないでおきます。

ですが、最近、Rustを学んでいるため、式とは?文とは?をあいまいに再確認したところなのですが、なんとなくそれを思い出す学びでした。

余談

余談ですが、はじめに書いたCのコードは、こう書いたほうがまだマシでしょうか。

while ((c = getchar()) != EOF) {
    /* to do something */
}

C言語を一から書くことが少なくなったので、だいぶ記憶がふわふわしていますし、実行環境がプライベートにないため、上記コードは試していません。

ご注意を。

0
0
2

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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?