コーディングとシステム開発ができるコーチ、ファシリテーターです。
こんにちは。
機械学習や深層学習を使って、やってみたいことがあるので
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使えば手間ではないとは言え、完全に書かなくていいのは
プログラミング始める人には良いと思った。
1 2 3 4 5 6 |
#Java public class Hoge{ public static void main(String args[]){ System.out.println("Hello world!"); } } |
がPythonだとこれだけ
1 2 |
#Python print('Hello world!') |
これは楽!
一方で変数の型宣言無しは、まだなんとも言えないな。
Javascriptでも思ったけど、
型検証したり、命名規約で縛るとかするのが良いのかな?
フロー制御
if、for、whileの基本制御構文たち。
言語によって少しづつ記述が違うのはやめて欲しい。
各制御ブロックをインデント(半角スペース4つ)であらわして、
コロン「:」で制御文の文末を装飾する。
代わりに中括弧「{}」を書かない。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#java if (True) { println("真だよ"); } else{ println("偽だよ"); } for (i = 0; i < 5; i++) { println("i= " + i); } int i = 0; while (i < 5) { println("i= " + i); i++; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#Python if True: print('真だよ') else: print(''偽だよ) for i in range(5): print('i= ' + str(i)) i = 0 while (i < 5): print('i= ' + str(i)) i += 1 |
for文がjavaのfor each のような動きなのかな。
range(n)でコレクション作って、それを順次取り出してループする。
インデント揃えないと、ブロックとして成り立たない。ってのは
可読性にも良いですね。
インデントがバラバラなコードを見なくてすむのは精神衛生上よろしいかと。
関数
開始間もなくで関数が出てきました。
Pythonでエントリーポイント(java のstatic void main~)書かないで処理が実行されるのは、
上から順に解析と実行がされているからなんだと。
後から処理を実行したい。とか
何度も同じ処理を実行したい場合は、その処理単位で関数にしておこう。
1 2 3 4 5 |
#Python def hoge(): #関数hogeの中身 hoge() #関数hogeを呼び出し |
戻り値宣言無く、関数名と引数と処理の内容書けばOK。
関数は戻り値が何かあるのは当然だよね。との事らしく、
わざわざ宣言せずに、
処理の中でreturn ○○ 書けばいい。
当然ながら、引数は変数名だけ書いて、型は無し。
処理によって値が違う関数ではなくて、型が違うのが返ってくる関数もできるのか・・・
リスト
List?なのか配列なのか?
値の初期化は配列では無いかと思うけど
1 2 |
#Python hoge = ["abc","def","ghi","jkl"] |
検索やら、並び替え、リスト通しの結合、要素削除、挿入、追加と
JavaのListと近い感じで使えます。
やっぱりリストなのか。
型による制限がないので、文字列と数値が混在するリストも可能。
混在するリストでソートさせるとエラーになるよ。
という事なんで、ここらも例外処理考えるポイントになるのか?
ここでデータ型のミュータブル(変更可能なデータ型)とイミュータブル(変更不能なデータ型)、
リストのイミュータブル型であるタプル。という言葉がでてきました。
リストはミュータブルなデータ型。
要素の中身を変更する事もできるし、サイズを変える事もできる。
イミュータブルなタプルにすると、要素の中身変えられないし、サイズ変更もダメ。
文字列型もイミュータブル。
プログラム書く側ではそれほど違いはないみたいですが、
Pythonがイミュータブルなタプルを使うと若干早くなることもある。
ということなんで、メモリ展開などで省エネなんだろうか?
というところまで来て終わります。
まとめ
プログラムを始めるなら、余分なおまじないなしで書けるので良い。
変数になんでも入るので、実行時のエラー解析力はちゃんとつける必要ありかな。
ブロックと、インデントは慣れると快適に感じます。
ここまでは、退屈なことをPythonにさせていない。
書いてるコードが退屈・・・なので早く次に進みたい。
コメント