Pythonのお勉強

時代はPython!!な雰囲気をひしひしと感じているのでVerilog同様、独学で勉強したいと思います。もともと機械学習でいろいろ実装したいなーと考えているので、そのための武器を準備する形ですね。参考書はオライリーのPython本の評判が高いのでこれをベースにしてみようかと。少し難易度が高く他言語の経験があると良いとのことですが、人並み(?)にCは書けるのできっと大丈夫。

入門 Python 3

入門 Python 3

posted with amazlet at 17.05.03
Bill Lubanovic
オライリージャパン
売り上げランキング: 588
エディタ

当面はコマンドプロンプトでポチポチ触ることになりそうですが、PyCharmというエディタが良いらしいです。追って記載します。

 

お勉強

スクリプト言語の経験は初めてだったのですが、冒頭で紹介されているようにPythonをはじめとするスクリプト言語は簡潔な記述なので生産性が高いと言われているようです。例えばC、C++、Javaは静的言語であり変数の型宣言が必要ですが、Pythonは動的言語(スクリプト言語)でありインタープリタが動的に変数の型を解釈しますし、またコンパイルも必要なくいわゆる“おまじない”のような記述も少ないため、本当に重要な部分に重心を据えてコーディングできるんですね。このような特性から動的言語は実行速度が遅く、これまでは静的言語で書かれた長いプログラムのデータを準備するために使われることが多かったようですが、今日の動的言語は大規模処理にも対応できるようです。では早速Pythonをいじってみようと思います。

1章

Pythonファイルを作ってプログラムを実行してみる。print(61)とだけ書いた.pyファイルを作り、コマンドプロンプトからpyton ~.pyで実行。61が表示された!!……きっと初めはみんなこう。Hello Worldじゃないんだね。ちなみに.pyファイルをカレントディレクトリに置いていなくて30秒くらい悩んだのは内緒。カレントディレクトリとは、Anaconda3のディレクトリ(恐らく初期設定ではC直下のユーザーフォルダ)があるところ。

 

2章

Python2ではintのサイズは32ビット、longは64ビットに制限されていましたが、Python3ではlong型は無くなってintは任意のサイズを表現できるようになったらしい。他の言語では整数オーバーフローが起きるような計算も実行可能で、Pythonは途方もなく大きな整数を問題なく処理できるそう。流石は科学技術計算言語!!一体どこまで扱えるんだろうか?主記憶の残量いっぱい使用できるのだろうか。テストするのは怖いです。

対数や平方根、三角関数といった数学関数は専用のライブラリを使用するそう。import ライブラリ名で所望のライブラリにアクセスできるらしい。以下はmathライブラリの練習として対数計算を行ってみた結果。1つ目の計算ではライブラリを取り込んでないためエラー。2つ目はライブラリを取り込んだ後の処理のため成功。3つ目は一度quit()してから実行してみた結果でエラー。quit()するとライブラリはアンポートされるようですね。

文字列はシングルクォートかダブルクォート、3個のシングルクォートや3個のダブルクォートで囲んで作るらしい。何故3個のダブルクォートなんてサポートされているかと言うと、こうすることで文字列の中にクォート文字を入れることができるようです。こういうのはブロック文字を使って実現するものだと思っていただけに目から鱗。

関数の中にはlen()関数などとは違って文字列専用の関数もあり、そのような文字列専用関数を使う場合は文字列変数名.関数名(引数)のように使用するらしい。これまでの関数使用方法と違って少し腰が引けましたが、こういった関数は山ほどあるんでしょうね。例えばsplit()関数はセパレータを引数として文字列を分割することができるもので、mojiretsu = ‘study, of, Python’を宣言してmojiretsu.split(‘,’)を実行すると[‘study’, ‘of’, ‘Python’]と出力されました。引数を指定しないと空白文字(改行、スペース、タブ)によって分割されるらしいのですが、そうそうPythonにvoidってあるのでしょうか?

 

3章

「リストとタプルはシーケンスであり、0個以上の要素を持つことができる」と説明されていますが……意味不明。2章に戻ってみると、文字列はPythonで勉強する最初のシーケンスと書かれているし、そもそもシーケンスって何なんだ?結論から言うと、シーケンスとはCの配列のような複数の値を1つの変数で管理する仕組みのこと。これなら“要素”という単語も腑に落ちます。Pythonには配列が無く、リストとタプルで複数の値を管理するんですね。Pythonのリストとタプルは文字列と異なって個々の要素がリストでもタプルでも良いらしく、いくらでも深い複雑なデータ構造を作れるらしいです。タプルはイミュータブルですがリストはミュータブルで、要素の挿入や削除が行えるようです。