NTT DATA TECH
👴

C/C++の世界に閉じこもっていたオジサンがPythonに触れてみる  ~基礎編~ 第3/10回

に公開

はじめに

こんにちは、NTTデータに勤務する一人のオジサンです。

これまでC/C++言語を使って、がっつりとポインタやら参照やらに向き合いながら、プログラムを書いてきました。構造体と仲良くなり、クラスに振り回され、newとdeleteに責任を持つ。そんな人生でした。

しかし時代は変わり、AIだ、データサイエンスだ、機械学習だと騒がれる中、「とりあえずPythonに触れないとまずい」という危機感に駆られて、Pythonの世界へ足を踏み入れた。。。

そんなオジサンの独り言です。

型定義のない世界に立ちすくむ

早速Pythonのコードを書いてみることにする。

// cpp
int x = 10;
# pyhon
x = 10

それだけ?
いやいや、ちょっと待てよ。
「int」も「double」も、何も書かれてないじゃないか。
まさかとは思うが、これは型を書かないということか?

C++では、変数を作るたびに名乗らせてきた。
「お前はintだ」「お前はcharだ」って。
ちゃんと名札をつけてからじゃないと、コードの世界には入れなかった。

だが、Pythonは違う。
「名前? いらないいらない、とりあえずやってみようよ」ってノリだ。
まるで飲み屋で隣に座っただけで、すぐ友達になってるあの感じ。
なんて軽いんだ。怖いくらいに、軽い。

型がないってことは、変数が今後どう変わるかも分からないってことだ。
もしかしたらさっきまで数値だったやつが、次の瞬間には文字列になってるかもしれない。

# python
 x = 10
 x = "もう数字じゃないよ"

おいおい、そんなこと、ありなのか?
昨日まで醤油だったやつが、今日からソース名乗ってるみたいなもんだぞ。
C++で実現できなくはないが、労力を考えると新しくstd::string型の変数を宣言するのが無難だ。

でも、きっとこれも慣れなんだろうな。
たまには、そういう名前も名乗らずに、ただそこにある何かと向き合うのも、悪くないのかもしれない。

型定義のない世界で早速転ぶ

# python
x = 100
y = "50"
print(x + y)

よし、100 と 50 を足して、150。
当然そうなるだろう。 いや、そうなる「はず」だった。
え?
TypeError: unsupported operand type(s) for +: 'int' and 'str'
な、なに?

ちょっと待て。
50と書いたじゃないか。
見た目は数字。だけど中身は文字列だって?
そんなバカな。。。

// cpp
int x = 100
std::string y = "50"
printf("%d", x + y)

C++だったら、こんなの型エラーでコンパイル時に弾かれてた。
intとstd::stringを無理やり足そうなんてしたら、怒られて当然だった。

でもPythonは書けちゃうんだ。
書けちゃうから、油断するんだ。

お前、さっきまで「数」だったよな。それが、急に「文字」だって言い出すなんて。。。
昨日までラーメン屋だったのに、何も言わずにフランス料理屋に変わってるようなもんじゃないか。

いやいや、悪いのはPythonじゃない。
型をちゃんと気にしなかった、私のほうだ。

こいつは、型に縛られず自由なぶん、「信用せず、確認する力」が求められるわけか。
わかったよPython。お前はそういうヤツだ。
次は、ちゃんと int(y) にしてから足してやるからな。

続・型定義のない世界に立ちすくむ

関数の定義を眺めながら・・・

// cpp
void Greet(std:string& name)
{
    printf("こんにちは、%sさん\n", name);
}
# python
def Greet(name):
    print(f"こんにちは、{name}さん")

この関数Greet。名前をもらって、あいさつする。
それは分かる。
けど、このname。型がない。

ちょっと待て。これは引数だよな?
ここでも型がないとなると。どう扱えばいいのか分からん。

C++なら、こうだ。
「お前は文字列として来いよ」って、最初に言っておく。
それが礼儀ってもんだろ。

けどPythonは違う。名乗らない。
「とりあえず来ました」みたいな顔をして、スッと引数に入ってくる。

まるで、常連でもないのに暖簾をくぐってカウンターに座る新客だ。

名前が "name" ってだけで、何者かは分からない。
数かもしれないし、文字列かもしれないし、リストって可能性すらある。

なるほど、Pythonは自由だけど、慎重さと観察力が求められる世界。。。

続続・型定義のない世界に立ちすくむ⇒脱却!?

Pythonのドキュメントを読み進めていると、ふと目にした関数定義に懐かしさを感じた。

# python
def Greet(name: str):
    print(f"こんにちは、{name}さん")

ん?あれ?
こ、これは。。。

「name: str」?
ついに名乗った。名乗ったのか?

ずっと黙ってたのに、「私はstrです」って、ちゃんと自己紹介してくれた。
なんだよ、やればできるじゃないか。

「自由すぎるのがPython」だと思ってたけど、
本当は、ちゃんと名乗る文化もあったんだな。

これは安心できる。
あの無口だった変数が、やっと話しかけてくれた気がする。

しかも、これは型ヒントと呼ぶそうで、あくまで「ヒント」。
無理に縛らない。いい距離感だ。

Pythonよ。ただの自由人かと思ってたけど、
ちゃんと筋も通すタイプだったんだな。
少し、見直したよ。。。

おわりに

もっともっと、お前のことを知りたくなってきたよ。

デジタルテクノロジーディレクター®

デジタルテクノロジーディレクター®

NTT DATA TECH
NTT DATA TECH
設定によりコメント欄が無効化されています