ソフトウェア開発において、プログラムは「データ」と「アルゴリズム(ビジネスロジック)」の組み合わせで構成されます。効率的な開発を行うためには、言語が提供するデータ型、制御構造、および標準ライブラリの特性を深く理解することが不可欠です。
1. 変数とデータ型の特性
Pythonは動的型付け言語であり、変数はメモリ上のオブジェクトを指し示します。id()関数でメモリアドレスを、type()関数で型を確認できます。
# 変数の定義と確認
app_status = "active"
timeout_val = None
print(id(app_status)) # メモリアドレスの確認
print(type(app_status)) # 型の確認(str型)
主要なデータ型
- 数値型: int(整数), float(浮動小数点数)
- 文字列 (str): シングル、ダブル、またはトリプルクォートで定義。トリプルクォートは複数行の保持が可能です。
- リスト (list): 順序付けられた可変な要素の集合。
- 辞書 (dict): キーと値のペアによるマッピング。
- タプル (tuple): 不変(イミュータブル)な順序付き集合。
- 集合 (set): 重複を許さない要素の集まり。
- 論理型 (bool): True/False。数値の0、空の文字列、NoneなどはFalseと判定されます。
2. 文字列操作とスライス
文字列は不変オブジェクトであり、多様なメソッドが用意されています。
# 文字列メソッドの例
raw_path = " /usr/local/bin/python "
clean_path = raw_path.strip().upper() # 前後空白削除と大文字変換
parts = clean_path.split("/") # 区切り文字で分割
スライス処理
インデックスを利用して特定範囲のデータを抽出します。[開始:終了:ステップ]の形式をとり、終了インデックスは含まれません(左閉右開)。
sample_str = "PY-TH-ON"
print(sample_str[0:2]) # 'PY'
print(sample_str[::-1]) # 'NO-HT-YP' (反転)
3. 制御構造と演算子
条件分岐(if)とループ(for, while)はプログラムの論理フローを制御します。
論理演算とメンバーシップ
and, or, notによる論理結合のほか、in演算子で要素の存在確認、is演算子でオブジェクトの一致確認を行います。
ループ処理
# リスト内包表記による効率的なリスト生成
sq_list = [n ** 2 for n in range(10) if n % 2 == 0]
# Whileループとelse
count = 5
while count > 0:
count -= 1
else:
print("カウントダウン終了")
4. データ構造の操作
辞書 (Dictionary)
キーにはハッシュ可能な型(文字列、数値、タプル等)のみ指定可能です。
config = {"host": "localhost", "port": 8080}
# 安全な値の取得
port_num = config.get("port", 80)
# キーと値の列挙
for key, val in config.items():
print(f"{key}: {val}")
集合 (Set)
数学的な集合演算(和集合、積集合など)が可能です。
nodes_a = {"node1", "node2", "node3"}
nodes_b = {"node3", "node4"}
# 積集合
common = nodes_a & nodes_b # {'node3'}
# 差集合
unique_a = nodes_a - nodes_b # {'node1', 'node2'}
5. 関数設計とスコープ
関数はコードの再利用性を高めるための最小単位です。
def process_data(target, *args, mode="default", **kwargs):
"""
位置引数、可変引数(*args)、キーワード引数(**kwargs)を組み合わせた例
"""
global_var_access = "関数外の変数を変更するには 'global' 宣言が必要"
return target.count(args[0]) if args else 0
# 匿名関数 (lambda)
multiply = lambda x, y: x * y
6. 標準ライブラリの活用
osモジュール
ファイルパス操作やディレクトリ一覧の取得に使用します。os.path.join()によるパス結合はOS間の差異を吸収します。
time/datetimeモジュール
time.strftime()を利用して、タイムスタンプを任意のフォーマット文字列(例:"%Y-%m-%d %H:%M:%S")に変換できます。
7. データベース操作 (PyMySQL)
外部ライブラリを用いてMySQL等のRDBMSと連携します。接続、カーソル生成、実行、コミット/クローズのライフサイクル管理が重要です。
import pymysql
def fetch_records(query):
conn = pymysql.connect(host='127.0.0.1', user='web_user', password='password', db='app_db')
try:
with conn.cursor() as cursor:
cursor.execute(query)
return cursor.fetchall()
finally:
conn.close()
8. 例外処理 (Exception Handling)
予期せぬエラー(実行時エラー)によるプログラムの強制終了を防ぎます。
try:
result = 10 / int(input_val)
except ZeroDivisionError:
print("エラー: 0で割ることはできません")
except Exception as e:
print(f"不明なエラー: {e}")
finally:
print("リソースを解放します")
9. ファイル入出力と直列化
with構文(コンテキストマネージャ)を使用することで、ファイルのクローズ漏れを自動的に防止します。
import json
# JSONデータの書き出し
data_payload = {"id": 101, "tags": ["python", "dev"]}
with open("export.json", "w", encoding="utf-8") as f:
json.dump(data_payload, f, ensure_ascii=False)
# JSONデータの読み込み
with open("export.json", "r") as f:
loaded_data = json.load(f)