コードを書く場合、覚えたことの復習から始めると理解を深めることが出来るのですが、Pythonだと最初に登場するのは、
■ コンソール上での動作
■ ソースコードを書いたファイルからの実行
になります。この2つですが、
【 対話モードでの実行 】
■ 対話型でコードの記述が出来る。
■ 入力した結果がそのまま表示される
■ 関数やクラスを使わないと複雑な処理ができない
■ 記述なのでPythonを終了すると変数や記述の内容が
全て消える
【 コードの実行 】
■ ファイルの保存が必要
■ ファイルをコンソールで実行する必要がある
■ ファイルなのでソースコードはいつでも実行できる
と言う違いがあります。これは、データの記録先の違いになりますが、
■ 対話モード : 主記憶装置
■ ファイルの実行 : 補助記憶装置
にデータが記録されているので、揮発性のある主記憶装置に記憶されている場合、
■ プログラミング言語の終了
■ コンソールを閉じる
■ PCをシャットダウンや再起動を行う
ような処理を行うと全てのデータが消えます。この構造は、外部のマイコンにアクセスしてフラッシュ内に書かれたコードを実行する際に称するメモリー内のデータと同じですから、古いゲーム機のROMカートリッジを使用した場合と同じです。こうした製品はバックアップシステムがないので、データは常にメモリー内にストックされただけなので、
■ メモリーの開放
■ 通電しなくなる
だけでデータは消えてしまいます。前者がPythonの終了やターミナルの終了になり、後者が、PCのシャットダウンや再起動などのように電源を落とした状態が生じるものになります。
この状態だとデータがなくなりますが、ターミナル上でPythonを対話モードで使用した場合には、構文エラーが生じるだけで記述したコードは全て使用不能になります。その為、対話モードの場合、
【 Pythonやコンソールをシュル要していない状態 】
で、【 メモリー内にデータが記録されている状態 】 にして運用する必要があります。
この場合、処理によっては途中で処理が終わってしまうので、処理そのものの整合性を確認する場合だと、処理の塊で管理する必要があります。こうした処理を行う場合には、組み込み関数に収録されている
■ 変数
■ 関数
を使用することになりますが、処理そのものを関数に記録してしまえば長いコードでも問題なく格納できます。
対話モードの場合、
■ 変数
■ 配列(リストなど)
の初期化を行うと、そのデータは
■ メモリーの開放
■ Pythonを終了する
■ ターミナルを終了する
まで維持されるので、宣言をしておけば参照して使用することができます。Linux環境だと最初からディストリビューションのバージョンのリリース時に存在している新しいPythonが実装されているので、最初からPythonを使用することができます。また、リリース時期のバージョンを見ても少々古くても3.x系なので現在の記述の体系が維持されています。その為、
■ 非同期処理
■ スレッドやプロセスの利用
■ 仮想環境の利用
などが可能になっていますから標準ライブラリで行える処理も増えています。
対話モードを使う
Pythonがインストールされた環境では、ターミナルだけでPythonを試すことができます。Linuxでは、最初からPythonがインストールされているので、ターミナルを立ち上げた後に、
のようにコマンドを打ち込むと
のようにプロンプトの部分が変わります。Pythonが実行できるようになるとここに処理を打ち込んで実行できるようになります。
処理の実行が出来ると言っても、マイクラのコマンドブロックのように 【 一つの処理を実行できる仕組み 】 になっているので、ファイルを作って実行するのとは異なる作りになっています。
値を使う
対話モードでは、
■ 数字 : そのまま入力
■ 文字 : 引用符( ’ や " )を使う
ことで指定したものを表示できます。実際に使用してみると、
のようになりますが、エスケープシーケンスは使用できないので、
のようになります。このモードでは、テキストの判別しかしていないようなので、特殊な処理はできないようです。
変数を使用する
対話モードでは計算も行えるので、
のような処理が行えます。この処理では変数を使用していますが、
のように変数を宣言すると、変数がメモリー内の特定のアドレスに記録されます。記録された変数は変数名と紐付されるので、 【 変数名で呼び出すことが出来る 】 ようになります。
変数を宣言するとその値を呼び出して使用できるので、
■ 変数aの初期化(1を代入)
■ 変数bの初期化(1を代入)
■ 変数aと変数bの値を加算する
と言う処理を行っています。これらは個別の処理になっていますから、一つのずつ処理を実行する仕組みになっています。マイクラのコマンドブロックも1つのブロックに1つの処理しか実装できない(ので、その不便さを解消するためにexcuteコマンドが使用できるようになっています。)のですが、対話モードも同様の仕様になっています。
変数を宣言して値を代入すると変数を呼び出した時にその値を使用できるので、
のように四則演算や剰余(割った後の余り)などを取得できます。ただし、式の構造によっては演算記号の優先順位からおかしな結果になる場合があります。例えば、割った後のあまりの整数部分を取得する処理では、
のような記述になりますが、この記述を間違うと演算の順序が破綻するのでおかしな結果になります。
後者が値が確定した状態での演算ですが、前者は数式の演算方法が破綻しているのでおかしな値になっています。
このように、演算を行う場合にも
【 基本的な数式の形を作る必要がある 】
ので、
【 項 】+ 【 演算記号 】 + 【 項 】
のような構造になるように数式を形作る必要があります。然樹tの処理ですが、演算器語の前後にある項を構成する数式を変数に代入する形にすれば、おかしな円座記号は不kまれなくなるので、実装されている機能を正しく使用することができます。
の事例は、
【 エラーが出ないが意図しない値になっている事例 】
になりますが、こうしたおかしな処理が混ざるとコードの中に予期しない挙動が発生することになります。こえrもバグの発生する要因になりますが、プログラミングを行う場合には、エラーが出るようなものは 【 理解できて修正できるようなレベルのもの 】 なので深刻度は生井のですが、問題となるのは、前述のように
【 処理が間違っているが、コード的には問題がないので実行できてしまうもの 】
になります。その為、こういったコードにならないように実際に挙動を確かめながらコードを書いていくことになります。
コンピューターの処理は数値の変化なので数学や物理法則などで動いているので、実装した処理と結果の確認を刷る場合には、プログラミング言語の使い方だけではなく数値の制御に必要な知識も身に着けておく必要があります。
変数を使うと、
のように一次関数の構造を実装することもできますが、この状態で、
のようにxを変更しても、yは元の数値なので、X=0の時の値が表示されます。ただし、この後に
のように関数部分を再度実行すると、変数yの値が更新されるので、変数yを呼び出すと、x=2が適応した結果に更新されます。その為、変数を使う場合には、
■ 変数の初期化
■ 変数に数式の代入
■ 数式を代入した変数の呼び出し
のような記述にすることで、実装した数式の回を求めることが出来るようになっています。
対話モードの注意点
対話モードは、記述した内容だけが処理されるので、【 コードの保存ができない仕様 】 になっています。
また、処理も含めて実行されている内容はメモリー内で全て完結しているので、
のようにquit()コマンドでPythonを狩猟してしまうとメモリー内のデータが全て消えてしまいます。当然、
■ ターミナルの終了
■ PCの再起動
■ PCのシャットダウン
を行うと、メモリー内のデータは消えるので、変数の再利用を刷ることができなくなります。実際にPythonを終了して、
のようにプロンプトがBASHに戻った状態で再度、
のようにコマンドを打ち込んでPythonを起動して
のように先程の使用していた変数を呼び出してみると、
のようにエラーが出ます。
がquit()からの流れになりますが、しっかりとメモリー内に変数が残っていないのでエラーが発生しています。
文字列の処理
変数に数値型のリテラル(値)を代入した際には演算記号を使用して、計算が行えるようになっていますが、プログラミング言語では、文字列の結合や繰り返しを演算記号で行うことが出来る用意なっています。
C++のようにストリームを使うものだと
cout<<変数<<変数<<endl;
のような記述にすると型に関係なく文字列を作れるので、文字と数字の組み合わせもこの形だえkで行えるようになっていますが、Pythonの場合だと、 【 型を揃える必要がある 】 ので、文字列の結合を刷る際には、変数の値を文字列型のstr型に揃える必要があります。
文字列同士の場合だと、
のように 【 + 】 だけで結合できます。また、
のように 【 * 】 を使用すると指定した回数分だけ繰り返して表示を行うことができます。
このように文字列の結合が出来るので、
のように複数の変数を用意しておくと
のように変数の組み合わせを変えるだけで文面を作り変えることができます。
この仕組みは 【 宛名印刷 】 のようなデータ部分だけが入れ替わった時に差し替える処理で使用しますが、おぢーすソフトの宛名を変更した印刷やメールアドレスの変更などもこうした変数の制御で行うことが出来るようになっています。
その為、文面の部分的な変化程度だとそれほど難しい処理ではないので、 【 変数を使うと言う初歩的な物 】 を用るだけで行えるようになっています。
対話モードでの入力待ち
対話モードでは、処理は直後に行われる仕組みになっているので、input関数を使用した入力待ちについても直後に実行されます。
input関数は、
のように変数に格納して使用することになりますが、実行すると
のように引数の内容が表示され、入力待になります。ここで、
のように文字列を入力するとバッファにこのデータが格納されますが、Enterキーを押すことで確定します。この状態だと、変数への値の代入しか行っていないので、Enterキーで値を確定させてメモリーにデータを格納して変数との紐付けをして呼び出せるようにしても
のように記録だけで処理が終わります。これが、変数に対しての値の代入になりますが、ここでは、
■ 変数aの宣言
■ 値の代入
を一度に行っていますから、この処理は 【 初期化 】 になります。
この状態で変数aを呼び出すと
のように入力した変数の値が表示されます。
関数を使用する
対話モードでは、マイクラノコマンドブロックのようにいつのコマンドしか実行できない仕様になっていますが、マイクラ内で使用できるfunctionコマンドのようにsyロイをまとめて格納することができます。この時に使用するのが関数になります。
Pythonの関数は、
【 関数の宣言 】
def 関数名(引数名):
処理
return 戻り値
と言う形で実装することができますが、この構造は高校の数学で登場する関数の記述と殆ど同じ仕様になっています。
高校の関数では、
■ 関数 : f(x)=関数の式
■ 実行 : f(1)
のような形になっていますが、この時の処理は変数に値を代入するだけで結果の取得が出来るようになっています。
プログラミング言語の関数は、 【 ブロックスコープ 】 がかかるので、関数内部の変数にアクセスすることはできません。これが、 【 堅牢性 】 を保つための仕組みになりますが、数学のカンスのような表記だと、
【 値を使わない処理 】
だと大丈夫ですが、関数内に変数を用意してその変数を外部で使用する際には 【 戻り値 】 として出力する必要があります。この時に 【 return 】 で出力する仕様になっています。
戻り値がない関数だとprint関数で表示を刷るようなものがありますが、
のようになりますが、この構造だと表示は関数の実行で行えるので、関数内で全ての処理が完結しています。その為、外部の変種の出力の必要がないので、returnを省略できます。
この実行ですが、引数もないので 【 関数名() 】で実行できるので、a()で実行できます。実際に実行すると
のようになります。このように関数を使うと、
のような形で処理を一つにまとめて記述し、関数の呼び出しで実行できるようになります。
対話モード使用時の関数の注意点としては、通常のコードのように開業するとエラーになります。実際に処理の間に空白を用意衣装とすると
のように関数から出てしまい、
のようなエラーが出てしまいます。また、対話モードはコードの途中で間違うと最初から入力しなければなりません。その為、長いコードを打ち込むのには向いていませんし、慎重にコードを打ち込む必要があります。
関数を使用すると、input関数を包含した処理も作れるので、
のような処理を作ることができます。これを実行
のように実行すると、
のように関数の実行どおりに、
■ 入力待ち
■ 入力待ち
■ 演算結果の表示
のような流れで処理を実行できます。
この処理では、
のような形になっていますが、対話型でも関数を使用すると処理の塊を作ってそれを関数の呼び出しだけで実行できるようになります。
関数を使用すると、
■ forやwhileのループ
■ ifによる判定
なども実装できるいるので複雑な処理を実行できるようになります。
こうしたターミナルだけでの処理というのはあまり行わないと思いますが、テキストエディタを使用しない状態で対話型でコードを実行する場合だと、関数やクラスのように処理の塊を用意してメモリー内に記憶しないと使用できない処理もあるので、簡素な作りで考える場合でも関数を用いた構造にする必要があります。