C/C++の世界に閉じこもっていたオジサンがPythonに触れてみる ~基礎編~ 第4/10回
はじめに
こんにちは、NTTデータに勤務する一人のオジサンです。
これまでC/C++言語を使って、がっつりとポインタやら参照やらに向き合いながら、プログラムを書いてきました。構造体と仲良くなり、クラスに振り回され、newとdeleteに責任を持つ。そんな人生でした。
しかし時代は変わり、AIだ、データサイエンスだ、機械学習だと騒がれる中、「とりあえずPythonに触れないとまずい」という危機感に駆られて、Pythonの世界へ足を踏み入れた。。。
そんなオジサンの独り言です。
勘違いがあっても、多めにみてください。
構文の違いを噛みしめる
Pythonの入門書を読み進め、「制御構文」の章へと差しかかる。
// cpp
int x = 10;
if (x > 5) {
printf("大きい\n");
}
else if (x == 10) {
printf("ぴったり\n");
}
else {
printf("それ以下\n");
}
# python
x = 10
if x > 5:
print("大きい")
elif x == 10:
print("ぴったり")
else:
print("それ以下")
なるほど。
型も書かない、セミコロンもない、波カッコもない。
最初はPythonのこの“緩さ”に戸惑っていたが、だいぶ筋が見えてきた。
カタチは違えどやってることは同じだ。
大事なのは、「何をするか」そこは変わってない。
そうか私は今、C/C++という言語の背広を脱いで、
PythonというTシャツに着替え始めてるのかもしれない。
まだ袖は通しきれてないけど。。。
これはこれで、悪くない着心地だ。
意味 | C/C++ | Python |
---|---|---|
等しい | == | == |
異なる | != | != |
AND | && | and |
OR | || | or |
NOT | ! | not |
こうやって、if文に使いそうな演算子の違いを並べてみると
等しい・異なるは、どっちも変わらない。世界共通語みたいで嬉しくなる。
しかし、その下
AND、OR、NOT、ここで急に文化の違いが顔を出す。
C/C++では、&&、||、!、と何ともいえない記号の強さがあり
頭の中に直接、条件が突き刺さってくる。
無駄がなく。容赦もない。
まさに機械だ。
対して、Pythonは and, or, not。
文字で書かれていて、あまりにも自然すぎる。
if x > 0 and y < 10:
これ、もう日常会話じゃないか。
「そして」「または」「〜でなければ」
書いてある通りに読める。
昔の自分なら、「記号の方が速い」「短い方が正義だ」と思っていた。
だけど、人に伝えることを重視するなら、Pythonの書き方は理にかなってる。
やるじゃないか。。。Python。
構文の違いを噛みしめる2
// cpp
for (int i = 0; i < 5; i++) {
printf("%d\n", i);
}
for (int i = 3; i < 8; i++) {
printf("%d\n", i);
}
for (int i = 0; i < 10; i += 2) {
printf("%d\n", i);
}
for (int i = 5; i > 0; i--) {
printf("%d\n", i);
}
# python
for i in range(5):
print(i)
for i in range(3, 8):
print(i)
for i in range(0, 10, 2):
print(i)
for i in range(5, 0, -1):
print(i)
これだ。
何度書いてきたか分からない、おなじみの for 三点セット。
初期化、条件、更新。
この3つで1セット、それが私たちの流儀だった。
まるで職人の型。
頭で考えずとも、指が自然に書いてしまうレベルの慣れ。
「何をどこから、どこまで、どう進めるか」
それを明文化しなきゃ始まらない。
回す前から、意志がにじみ出る。
それがC++の流儀だ。
そして、これがPythonか。
「range()」 に、全部詰め込んできやがった。
開始、終了、ステップ―全部この中に。
わかってるやつの手際の良さだな。
まるで、仕込み済みの食材が冷蔵庫に並んでる感じ。
必要なものを取り出して、火にかけるだけ。。。そんな軽快さ。
range(3, 8) って見ただけで、3から7まで回すんだな。
range(0, 10, 2) も、偶数だけを歩いていく足音が聞こえてくる。
そして range(5, 0, -1)逆方向に流れていくカウント。
C++のi-- に相当する、逆巻く川の流れを
たった一つの引数で表してくるとは、流石だな。。。Python。
おわりに
if文にfor文、ああ、もう大丈夫だ。
最初は括弧もセミコロンもなくて戸惑ったけど、
いつの間にか、それがない方が自然に思えてきた。
インデントで流れを表すこのスタイルも、慣れてしまえばむしろ見やすい。
こうしてスッと書けて、スッと動く。
そんなPythonの空気感に、ちょっと染まってきてるのかもしれない(笑)
この先、関数やクラスが出てくると思うが
うん、この調子ならたいていのことは、もう困らないんじゃないか?
そう思っていた。この時までは。
if文とfor文の中に、あんなトリッキーな「そんなのアリかよ」的な構文があるなんて。
Python。。。まだまだ手の内を見せてなかったんだな
デジタルテクノロジーディレクター®

NTT DATA公式アカウントです。 技術を愛するNTT DATAの技術者が、気軽に楽しく発信していきます。 当社のサービスなどについてのお問い合わせは、 お問い合わせフォーム nttdata.com/jp/ja/contact-us/ へお願いします。