課題
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言語を一から書くことが少なくなったので、だいぶ記憶がふわふわしていますし、実行環境がプライベートにないため、上記コードは試していません。
ご注意を。