この記事では、当社の新人エンジニア研修の参考として、Python を解説します。
第一章では、初めて Python を学ぶ皆さんが知っておきたい基本事項や考え方をまとめました。
新人エンジニアが最初に知っておきたい Python の学び方
なぜ Python を学ぶのか、その理由。
1. Python 言語の特徴
Python の特徴(または、当社新人エンジニア研修で Python を選択している理由)は以下の 4 点です。
- クロスプラットフォーム環境
Python は Windows、macOS、Linux など各種 OS で公式のインタプリタが提供されており、どこでも実行可能です。
※Java の「JVM による Write once, run anywhere」とは異なり、Python は各 OS 用に配布されるインタプリタを利用します。 - 多様なプログラミングパラダイムのサポート
Python はオブジェクト指向だけでなく、手続き型や関数型といった複数のパラダイムをサポートしており、プログラミングの基本概念を学ぶのに適しています。 - 幅広い活用分野
データサイエンス、機械学習、Web アプリケーション、スクリプトによる自動化など、幅広い分野で利用されているため、どの部署に配属されても役立ちます。 - シンプルな文法と他言語への橋渡し
文法がシンプルで読みやすく、初心者でも理解しやすい点はもちろん、他の言語(C、Java、JavaScript など)との共通概念も多いため、後々の他言語習得にも役立ちます。
調べてみましょう
なぜ様々なプログラミング言語が存在するのでしょうか?
例えば、以下のような点に着目して、インターネットで調べてみてください。
- Python と C 言語との関係
- Python の主要な実装である CPython は C 言語で書かれており、低レベルの処理や高速化のためのライブラリ実装に C/C++ の知識が役立ちます。
- Python と C++ との関係
- 数値計算や機械学習ライブラリ(例:NumPy、TensorFlow)の内部は C++ で実装されていることも多く、オブジェクト指向の基本概念は両言語で共通しています。
- Python と Java との関係
- 両言語はオブジェクト指向をサポートしていますが、Python は動的型付け・簡潔な記法で、開発速度やコードの読みやすさが特徴です。
※Java の静的型付けや厳格な構文ルールは Python には当てはまりません。
- 両言語はオブジェクト指向をサポートしていますが、Python は動的型付け・簡潔な記法で、開発速度やコードの読みやすさが特徴です。
- Python と JavaScript との関係
- 両者とも初心者に人気があります。Python はサーバサイドやデータ処理に強みがあり、JavaScript は Web フロントエンドやイベント駆動型プログラミングが中心です。
あなたの推測:
(例:各言語は歴史的背景や設計思想、用途に応じて発展しており、その違いが存在する。)
調べたことのメモ:
(例:C 言語はシステムプログラミング向け、Java は大規模システム向け、Python は迅速なプロトタイピングやデータ解析に適している、など。)
2. Python プログラムの実行
Python では、プログラムコードは基本的にインタプリタによって直接実行されます。
内部的には、ソースコードが自動的にバイトコード(.pyc ファイル)にコンパイルされ、Python 仮想マシン(PVM)上で実行されますが、このプロセスはユーザーが意識する必要はほとんどありません。
例:Hello World プログラム
以下のコードをエディタに入力してみましょう。
print("Hello World")
注意点:
- キーボードから入力する際、全角と半角の区別に注意してください。数値や英字は半角で入力する必要があります(IME の設定変更を行うなどの対策をお勧めします)。
保存先は、例えば C ドライブ直下の python
フォルダなどに新規保存し、ファイル名は example01.py
とします。
コマンドラインでの実行
以下のように実行してみましょう。
Python では、Java のようにソースコードからクラスファイルが生成される心配はなく、シンプルに実行できる点が特徴です。
また、今後は IDE(例:PyCharm、Visual Studio Code など)を活用すると、ワンクリックで実行できるため、より効率的に開発できます。
3. Python プログラムの構成
Python のプログラムは必ずしもクラスに囲まれる必要はなく、スクリプト形式で直接記述することが可能です。
しかし、プログラムが大きくなる場合は、関数やクラスを用いて論理的に整理するのが望ましいです。
例:main 関数を使った基本構成
def main():
print("Hello World")
if __name__ == '__main__':
main()
解説:
if __name__ == '__main__':
は、このスクリプトが直接実行された場合にのみmain()
を呼び出すための定型句です。- Java のように「public class」といった宣言は不要ですが、関数やクラスを用いることで、コードの再利用性や保守性が向上します。
4. オブジェクト指向のメリットとデメリット
オブジェクト指向 とは、データ(属性)とその処理(メソッド)をひとまとめにして扱う設計思想です。
Python はオブジェクト指向プログラミングをサポートしていますが、同時に手続き型や関数型プログラミングも可能な柔軟な言語です。
メリット
- モジュール性の向上
複雑なシステムを小さな部品(クラスや関数)に分割でき、メンテナンスが容易になる。 - 再利用性の向上
一度作成したクラスや関数は、他のプログラムでも再利用可能。 - 現実世界の概念の反映
オブジェクトという概念を用いて、現実のモノや概念をプログラムに近い形で表現できる。
デメリット
- 初期設計の負担
最初に設計を十分に行わなければならないため、短期間で試作する場合にはオーバーヘッドとなる可能性がある。 - 動的型付けの注意点
Python は動的型付けのため、プログラム規模が大きくなると型のチェックが甘くなり、バグの原因になる場合もある。
5. 本記事の方針
本記事では、Python の学習において以下の 3 つの「武器」を紹介します。
- 標準ライブラリ
Python には非常に充実した標準ライブラリがあり、分からない関数やクラスがあれば公式ドキュメント(英語の場合も多い)を参照しましょう。 - Python のソースコード(CPython)
Python 自体がオープンソースで提供されているため、実際の実装(CPython のソースコード)を読むことで内部動作を理解できます。
※Java のようにソースコードを読むことで「言語を言語自身から学ぶ」ことができますが、Python ではその実装は C 言語で書かれているため、注意が必要です。 - サンプルプログラム
英語の例文集のように、サンプルコードを通して文法や概念を学ぶことができます。実際に手を動かしてコードを書いてみることで、理解が深まります。
また、プログラミング言語は国際語です。英語で書かれたドキュメントやソースコードに触れる習慣を身につけると、後々大きな武器となります。
6. クラスのメンバ(属性とメソッド)
Python におけるクラスは、オブジェクトの設計図です。
クラスは主に以下の 2 つの要素から構成されます。
- 属性(フィールド)
オブジェクトの状態やデータを保持する変数。Python では、クラス内で定義された変数がこれにあたります。 - メソッド
オブジェクトが持つ動作や処理を定義する関数。クラス内で定義された関数は、そのクラスのインスタンスメソッドとなります。
例:
class NewEmployee:
# コンストラクタ(初期化メソッド)
def __init__(self, name, department):
self.name = name # 属性: 名前
self.department = department # 属性: 所属部署
# メソッド: 挨拶する
def greet(self):
print(f"こんにちは、{self.name}です。{self.department}に配属されました。")
※ Python では、属性やメソッドのアクセス制御は「_(アンダースコア)」の命名規則で暗黙的に行われ、Java のような public/private のキーワードはありません。
7. エラーを恐れない
プログラム開発ではエラーはつきものです。積極的にエラーを発生させ、その原因を探ることが上達の秘訣です。
再帰呼び出しの例
以下の例は、無限に再帰呼び出しを行うため、最終的にエラーとなります。
def main(args):
main(["Hello"]) # 自分自身を呼び出す(再帰呼び出し)
if __name__ == '__main__':
main([])
実行すると、Python は「RecursionError: maximum recursion depth exceeded」といったエラーメッセージを表示し、プログラムは終了します。
エラーメッセージには、どの行で何が起きたか重要な情報が含まれているので、必ず読んで理解する習慣をつけましょう。
8. プログラムはメモリ上にロードされて実行される
Python プログラムも、ソースコードがバイトコードに変換され、メモリ上にロードされて実行されます。
この過程を理解しておくと、プログラムの動作原理やエラー発生時の挙動、パフォーマンス最適化の際に役立ちます。
また、CPU はプログラムの命令を実行し、メモリ はデータの一時的な保管場所として機能します。これらの役割は、どのプログラミング言語でも共通の考え方です。
9. システムに必要な IPO
システムという概念は、「仕組み」を意味し、その基本構成は以下の 3 要素で成り立ちます。
- Input(入力)
ユーザーや他のシステムからの情報やデータ。 - Process(処理)
入力された情報を加工・解析し、目的の処理を実行。 - Output(出力)
処理結果を画面やファイル、他のシステムへ出力する。
例えば、Python で電卓プログラムを作成する場合、ユーザーから数値を入力(Input)し、計算処理を行い(Process)、結果を表示(Output)する、という流れになります。
このような IPO の考え方は、システム開発の基本であり、どの言語でも重要です。
10. コメントの入れ方
コメントは、コードに対する人間向けのメモです。Python では以下の方法で記述します。
- シングルラインコメント
行の先頭に#
を付けることで、その行の残りをコメントにできます。
# Hello World を表示する
print("Hello World")
- 複数行コメント(ドキュメンテーション文字列)
3 つのシングルクォート(''')またはダブルクォート(""")で囲む方法です。主に関数やクラスの説明に使われます。
"""
この関数は、Hello World を表示します。
作成者: yamazaki
作成日: 20XX/11/09
"""
def main():
print("Hello World")
コメントは、後で自分や他の人がコードを読み返すときの大切な手掛かりとなるため、積極的に記述しましょう。
11. エラーへの対処
Python では、エラーは大きく分けて以下の 3 種類に分類されます。
- 文法エラー(SyntaxError)
プログラムが正しい文法で書かれていない場合、実行前にエラーが検出されます。 - 実行時エラー(RuntimeError)
実行中に発生するエラー。例:ゼロ除算エラー、インデックスエラーなど。 - 論理エラー
プログラムは実行されるが、期待した結果が得られないエラーです。
※論理エラーは、テストやデバッガを使って検出する必要があります。
エラーメッセージには、エラー発生箇所や原因が示されるため、必ずその内容を確認し、グーグル検索などで対策を調べましょう。
12. 標準出力
Python において、標準出力 とは、プログラムが結果を表示するための出力先(コンソールなど)を指します。
標準出力には print()
関数を使用します。
print("Hello World")
print()
は自動的に改行を付けて出力します。- 改行が不要な場合は、
end
パラメータを利用できます(例:print("Hello", end=" ")
)。
標準出力を利用することは、デバッグやプログラムの動作確認にも非常に有効です。
まとめ
以上、Python の基本的な特徴や実行方法、プログラムの構成、オブジェクト指向の考え方、エラー処理、コメントの付け方、標準出力の利用方法などについて解説しました。
Java と比べると、Python は以下の点で異なります。
- シンプルな文法と動的型付け
→ コードが読みやすく、初心者にも取り組みやすい。 - コンパイルの概念がユーザーに隠蔽されている
→ ソースコードをそのまま実行できるため、環境構築が簡単。 - クラスや関数の定義ルールが柔軟
→ Java のようにファイル名とクラス名を一致させる必要はない。
ただし、Java のような厳密な型チェックやアクセス修飾子は存在しないため、コードの規模が大きくなるときは、設計やテストに特に注意が必要です。
Python はそのシンプルさと多機能性から、初学者が最初に取り組むプログラミング言語としても、プロフェッショナルが活用する言語としても非常に有用です。ぜひ、この記事を参考に、Python の世界に飛び込んでみてください!
※補足
本記事は、Java 用に書かれた記事内容を Python 向けに置き換えたものであり、Java 特有の概念(JVM、JDK、public、static など)は Python には当てはまりません。各項目は Python の文法や概念に合わせて解説していますので、その点をご理解ください。
まとめができたら、アウトプットとして演習問題にチャレンジしましょう。