Javaプログラマが退屈なことをPythonにやらせようとした①

コーディングとシステム開発ができるコーチ、ファシリテーターです。
こんにちは。

機械学習や深層学習を使って、やってみたいことがあるので
Python勉強。
子どもたちのプログラミング教室もPythonやるとこ多いようで、
負けてられないな。って気持ちもあります。

勉強するに一番良いのはプロジェクトに入る事(おい!)ですが、
時間も限られているので市販の教材使って勉強していきます。
私が選択したのはO’REILLYの「退屈なことはPythonにやらせよう」

開発環境構築は独自で構築しました。

この本のまえがきにあたる、開発環境の構築は全部無視しています。

VisualStudioCodeが使いたかったから・・・

【備忘録】Python開発環境をセットアップ【VisualStudio Code】

今回の記事の内容は、まだPythonは仕事してくれていません。
基本的な制御構文を書いてみたくらいです。

Python入門、static void main()はどこに?

Pythonいきなり処理命令文を書き始めるのか!
javaの基礎ではなんだかわからない”public class hoge{}”から始まって
”public static void main(string args[])”というおまじないがない。

IDE使えば手間ではないとは言え、完全に書かなくていいのは
プログラミング始める人には良いと思った。

がPythonだとこれだけ

これは楽!

一方で変数の型宣言無しは、まだなんとも言えないな。
Javascriptでも思ったけど、
型検証したり、命名規約で縛るとかするのが良いのかな?

フロー制御

if、for、whileの基本制御構文たち。
言語によって少しづつ記述が違うのはやめて欲しい。

各制御ブロックをインデント(半角スペース4つ)であらわして、
コロン「:」で制御文の文末を装飾する。
代わりに中括弧「{}」を書かない。

for文がjavaのfor each のような動きなのかな。
range(n)でコレクション作って、それを順次取り出してループする。

インデント揃えないと、ブロックとして成り立たない。ってのは
可読性にも良いですね。
インデントがバラバラなコードを見なくてすむのは精神衛生上よろしいかと。

関数

開始間もなくで関数が出てきました。

Pythonでエントリーポイント(java のstatic void main~)書かないで処理が実行されるのは、
上から順に解析と実行がされているからなんだと。

後から処理を実行したい。とか
何度も同じ処理を実行したい場合は、その処理単位で関数にしておこう。

戻り値宣言無く、関数名と引数と処理の内容書けばOK。
関数は戻り値が何かあるのは当然だよね。との事らしく、
わざわざ宣言せずに、
処理の中でreturn ○○ 書けばいい。

当然ながら、引数は変数名だけ書いて、型は無し。

処理によって値が違う関数ではなくて、型が違うのが返ってくる関数もできるのか・・・

リスト

List?なのか配列なのか?

値の初期化は配列では無いかと思うけど

検索やら、並び替え、リスト通しの結合、要素削除、挿入、追加と
JavaのListと近い感じで使えます。

やっぱりリストなのか。

型による制限がないので、文字列と数値が混在するリストも可能。
混在するリストでソートさせるとエラーになるよ。
という事なんで、ここらも例外処理考えるポイントになるのか?

ここでデータ型のミュータブル(変更可能なデータ型)とイミュータブル(変更不能なデータ型)、
リストのイミュータブル型であるタプル。という言葉がでてきました。

リストはミュータブルなデータ型。
要素の中身を変更する事もできるし、サイズを変える事もできる。
イミュータブルなタプルにすると、要素の中身変えられないし、サイズ変更もダメ。

文字列型もイミュータブル。

プログラム書く側ではそれほど違いはないみたいですが、
Pythonがイミュータブルなタプルを使うと若干早くなることもある。
ということなんで、メモリ展開などで省エネなんだろうか?

というところまで来て終わります。

まとめ

プログラムを始めるなら、余分なおまじないなしで書けるので良い。

変数になんでも入るので、実行時のエラー解析力はちゃんとつける必要ありかな。

ブロックと、インデントは慣れると快適に感じます。

ここまでは、退屈なことをPythonにさせていない。
書いてるコードが退屈・・・なので早く次に進みたい。

コメント