Python言語の概要と分類
Pythonは、Guido van Rossum氏によって開発されたプログラミング言語です。プログラミング言語にはいくつかの分類方法がありますが、Pythonは主に以下の特性を持っています。
動的型付けと言語特性
- 動的型付け言語: プログラムの実行時にデータ型のチェックを行います。変数宣言時に型を指定する必要がなく、代入された値に基づいて型が決まります。Rubyなどもこの分類に含まれます。
- 静的型付け言語: コンパイル時に型チェックを行う言語です。C++、Java、C#などが該当し、変数の宣言時に明示的な型指定が必要です。
- インタプリタ型: コンパイル作業を意識することなく、ソースコードを逐次解釈して実行します。実際には内部でバイトコードに変換された後、Python仮想マシン(PVM)上で実行されます。
主な利用シーン
Pythonはその汎用性の高さから、多岐にわたる分野で採用されています。
- Webアプリケーション: DjangoやFlaskといった強力なフレームワークにより、スピーディな開発が可能です。
- インフラ自動化: システム管理やサーバー運用を自動化するスクリプトとして、シェルスクリプトに代わり広く利用されています。
- データサイエンス: NumPy、SciPy、Matplotlib、Pandasなど、科学計算やデータ解析に不可欠なライブラリが充実しています。
- AI・機械学習: PyTorchやTensorFlowといった主要なフレームワークの多くがPythonをフロントエンドとして採用しています。
- デスクトップツール: PyQtやTkinterを使用し、GUIを備えたツールを容易に構築できます。
Pythonの利点と制約
長所
文法がシンプルで読みやすく、開発効率が非常に高いことが最大の特徴です。また、オープンソースとして多くのプラットフォームに対応しており、標準ライブラリやサードパーティ製ライブラリが極めて豊富です。
短所
CやC++といったコンパイル言語と比較すると実行速度は劣ります。また、グローバルインタプリタロック(GIL)の影響で、マルチスレッドによるCPU並列処理には制約があります。
環境構築手順
Linux(ソースビルド)
依存ライブラリをインストールした後、公式サイトからソースを取得してビルドする際の手順例です。
# 依存パッケージの導入
sudo yum -y install gcc make zlib-devel openssl-devel libffi-devel
# ソースのダウンロードと展開
curl -O https://www.python.org/ftp/python/3.9.0/Python-3.9.0.tgz
tar -xvzf Python-3.9.0.tgz
cd Python-3.9.0
# ビルド構成とインストール
./configure --prefix=/opt/python39
make && sudo make install
# パス設定
export PATH=/opt/python39/bin:$PATH
Windows
公式サイトからインストーラー(.exe)をダウンロードして実行します。インストール時に「Add Python to PATH」にチェックを入れることで、コマンドプロンプトから直接呼び出せるようになります。
基本構文と制御構造
文字エンコーディング
Python 3系では標準でUnicode(UTF-8)が採用されており、日本語などのマルチバイト文字も宣言なしで扱うことが可能です。
条件分岐(if文)
インデントによってブロックを表現します。
user_score = int(input("スコアを入力してください: "))
if user_score >= 90:
grade = "A"
elif user_score >= 70:
grade = "B"
else:
grade = "C"
print(f"評価は {grade} です")
ループ処理(while / for)
リストの要素を反復処理する例です。
# 1から10までの合計を計算
total = 0
counter = 1
while counter <= 10:
total += counter
counter += 1
print(f"合計: {total}")
# for文によるリスト走査
items = ["apple", "banana", "cherry"]
for item in items:
if item == "banana":
continue # スキップ
print(f"フルーツ: {item}")
変数の参照とコピー(深層・浅層)
Pythonでは変数はオブジェクトへの参照を保持します。リストや辞書などの可変(mutable)オブジェクトを扱う際は、コピーの種類に注意が必要です。
浅いコピー(Shallow Copy)
最上位のオブジェクトのみを複製します。内部にネストされたオブジェクトがある場合、それらは同じ参照を共有します。
import copy
original_list = [[1, 2, 3], [4, 5, 6]]
shallow_copied = copy.copy(original_list)
# 内部リストを書き換えると両方に影響する
original_list[0][0] = 99
print(shallow_copied[0][0]) # 結果: 99
深いコピー(Deep Copy)
再帰的にすべてのオブジェクトを複製するため、元のオブジェクトと完全に独立します。
import copy
deep_copied = copy.deepcopy(original_list)
original_list[0][0] = 777
print(deep_copied[0][0]) # 結果: 99 (変更の影響を受けない)