Python基礎講座 #4 変数
今回の講座のテーマは変数です。 変数はプログラミングの概念の中でも最も基礎的でありながら、最も重要な概念です。 変数とは、データを保存できるメモリ空間を意味し、このメモリ空間つまり変数には、変数の中にどんなデータが保存されているかを分かりやすくするために名前が付けられます。 プログラムを作っていると同じデータを何度も使う場合が多いのですが、 データを毎回直接代入して使うよりも、変数というメモリ空間にデータを保存しておき、 必要なときにメモリ空間に保存しておいたデータを参照して使うほうが、より効果的で、 より柔軟なプログラムを作ることができるため、変数を使うのです。 そして、このメモリ空間に自分や他の開発者が理解しやすい名前を付け、その名前を通して参照するわけです。 プログラミングを初めて始める方には理解しにくいと思いますので、もう少し分かりやすく説明します。
Excelを使ってハンバーガーの価格を計算するとしたとき、 良くない方法ですが、計算するたびに数式にハンバーガーの価格を直接代入して計算することもできます。 しかし、計算しなければならないアイテムが増えて、頻繁に価格を変更しなければならない場合、 このように直接データを入力することは効率的ではないですし、誤って間違ったデータを代入してしまうことも起こりがちです。 こういった問題は、このようにC2に保存されたデータを参照することで解決できます。 このように一つのセルに保存されたデータを参照すれば、価格が変更されても参照されているデータ一つだけを変更すれば、 このデータを参照しているすべてのデータが自動で変更され、より効果的にデータ管理ができ、間違ったデータの入力も防げます。 ところがこの方法にも問題があり、もしメニューの種類が数十個に増えた場合、すべてのメニューについて数十個のセルのアドレスを記憶することは不可能になります。 この問題は、セルにメニュー名のような名前を付けて使うことで解決できます。 この方法を使えば、わざわざセルのアドレスを覚えなくても、セルに保存されたデータを参照できるようになります。 今お見せした例は、プログラムで変数を使う概念とかなり似ています。 ハンバーガーの価格が保存されたセルをメモリ空間つまり変数だと思えばよく、セルに付けた名前を変数の名前だと考えてください。
実際のプログラムでは次のようなコードを使って変数にデータを保存しますが、 左のageはデータが保存される変数で、右の25は変数に保存されるデータです。 そして、真ん中のイコールサインは代入演算子と呼ばれ、数学のイコールサインのようにageと25が等しいという意味ではなく、25をageという変数の中に代入せよ、という意味を持っています。 図のようにメモリブロックがあるとしたとき、 age = 25というコードをPythonに渡すと、25をあるメモリブロックに保存します。 ところで25というデータを再び使いたいときに、0x00000007のような覚えにくく複雑なメモリアドレスを使って参照するのではなく、 ageという覚えやすい名前をメモリアドレスにラベルのように付けておき、この名前を使って25を参照するわけです。
PyCharmで変数を使う簡単な例をいくつかお見せします。 先ほど説明した通り、age = 25というコードを入力してprint関数でageの値を確認すると、25が出力されることが分かります。
今度はハンバーガーの価格を計算する簡単なPythonプログラムを見ていきましょう。 先ほどお見せしたExcelの例と全く同じ機能をするPythonプログラムです。 実行してみましょう。 しかし、このように変数を使わなければ、毎回ハンバーガーの価格を計算するたびに一つ一つ価格を入力しなければなりませんし、 価格を1000ウォンから1100ウォンに変更しなければならない場合、ハンバーガーの価格が使われているすべての箇所を変更しなければなりません。 このようにプログラムを作ると、コーディング時間が大幅に増えるだけでなく、 データを変更するときに誤って漏れる箇所が出てきて、それによって間違った戻り値を返すようになります。 そして、このようなエラーは構文エラーとは違い、デバッグに時間も多くかかります。 先ほど申し上げた通り、こういった問題を解決するために変数を使う必要があります。 このコードを修正して変数を使ってみましょう。 まず変数を定義し、直接入力していた数字を変数名に置き換えてみます。 コードを実行してみましょう。同じ結果値が出ることが分かります。 このように変数を使えば、価格を変更しなければならない場合でも、変数の中に保存された値だけを変更すれば、 変数の値を参照しているすべての箇所の値を同時に変更できるのです。 もし15パーセントセールをしなければならないなら、既存の値に簡単に0.85を掛けてセール価格を計算できます。
変数を使うもう一つの良い例は、 ユーザーとコミュニケーションをするインタラクティブなプログラムを作るときです。
このプログラムは、ユーザーの名前と年齢を入力してもらい、変数に保存した後、変数に保存されたデータを出力する簡単なプログラムです。 実行してみましょう。
このほかにも、データベースから取得したデータを変数に保存して再び参照することで、 同じデータベースクエリの繰り返しを減らし、データベースとネットワークの負荷を軽減する役割もします。
変数の名前を付けるには、一定のルールに従う必要があります。 これらのルールはPythonだけでなく、すべてのプログラミング言語に適用されるルールです。
最初のルールです。 変数の名前にスペースを含めることはできません。 もし複数の単語を変数名として使いたい場合は、アンダースコアでつなぐか、スペースなしですべての単語を続けて 使えばよいのです。
二つ目のルールです。 変数の名前には、数字、アルファベット、そしてアンダースコアを除く特殊文字を含めることはできません。
三つ目のルールです。 変数の名前は数字で始めることはできません。 変数名の最初の文字としては、アルファベットかアンダースコアだけが使えます。
四つ目のルールです。 Python内部で使うキーワードを変数名として使うことはできません。 Pythonで使われるキーワードには、次のようなものがあります。
五つ目のルールです。 変数の名前は大文字と小文字を区別します。 つまり、大文字のXと小文字のxは別の変数だということです。
ここでは、変数名の良い例と悪い例を見ていきましょう。 ネーミング例題1の悪い例は、すべて構文エラーを発生させます。
最初の例は、変数名として2単語以上を使う場合です。すべての単語をアンダースコアでつなぐか、間のすべてのスペースをなくす必要があります。 2つ目の例は、アンダースコア以外のハイフンのような特殊文字は使えないことを示しています。 3つ目の例は、変数名を数字で始めることができないことを示しています。 最後の例は、classのようなPythonが使うキーワードを変数名として使えないことを示しています。
ネーミング例題2の悪い例はエラーは発生させませんが、PEP8というPythonのスタイルガイドに反する形式なので、 使わないほうが良いです。
最初の悪い例を見ると、変数名の最初の文字に大文字を使っていますが、 クラス名やコンスタント以外の通常の変数の名前や関数の名前は小文字で始める必要があります。
2つ目の悪い例を見ると、3つの単語をつないで2番目と3番目の単語の最初の文字を大文字にしています。 このような形式をキャメルケースと呼びますが、Pythonではクラス名以外にはキャメルケースを使いません。
3つ目は定数の例で、変数とは違い常に同じ値を持つ定数の名前は、すべて大文字とアンダースコアだけを使う必要があります。
4つ目の例は、タイピングがもう少し増えて多少面倒でも、変数にどんなデータが保存されているかが 分かるように、分かりやすい名前を付けるべきだということを示しています。 コードは自分だけでなく、同じプロジェクトの他の開発者と共有しなければならないことが多いので、 他の開発者もコードを理解しやすいよう、意味が分かりやすい変数名を付ける必要があります。 実は他の開発者だけでなく、コードを書いた自分自身も、数か月後に自分のコードを見てすぐには理解できないことが多くあります。 最後の例ではintというPythonのスタンダードデータ型の名前を使っていますが、int、float、strなどのスタンダードデータ型の名前やスタンダードモジュール、関数の名前などの使用は避けるべきです。
最後に、変数にはどんなデータを保存できるかを見て、今回の講座を終わりたいと思います。
変数には整数と小数点を持つ実数を保存できます。 そして、テキストのような文字列を保存できますが、文字列を使うときは整数や実数とは違ってシングルクォートやダブルクォートで囲んで使う必要があります。 そしてブール、リスト、タプル、辞書、クラスインスタンス、関数まで変数に保存できますが、Pythonではほとんどすべてのオブジェクトを変数に保存できます。
皆さんも変数を上手に使って、不要な繰り返しを減らし、柔軟で良いパフォーマンスを出すプログラムを作ってください。 今回の講座はここで終わりにします。チャンネル登録と高評価ボタンをよろしくお願いします。ありがとうございました。