Skip to content

Python

基礎知識

コメント

  • 一行コメントはシャープを一つ使います:# コメント内容
  • 複数行コメントは三つのダブルクォートを使います:""" コメント内容 """

基本文法

Python は動的型付け言語なので、型を明示的に宣言する必要はありません。 変数定義:変数名 = 変数値

python
name = "Alice"    # 文字列
age = 25          # 整数
pi = 3.14159      # 浮動小数点数
is_student = True # ブール値

命名規則(Java と共通)

  • 英字またはアンダースコアで始めます。数字で始めることはできません。
  • 英字、数字、アンダースコアだけを含めます。
  • 大文字小文字を区別します(nameName)。
  • キーワード(例:if, for)の使用を避けます。
  • camelCase(userName)または snake_case(user_name)をすすめます。

Java と違い、print メソッドで複数内容を出力する時は、カンマで区切ります。

python
print("Hello", "World")  # 出力:Hello World
print(10 + 5)            # 出力:15

データ型

主要データ型

データ型説明可変性注意点
Number数値型(整数、浮動小数点、複素数、ブール値)不可変age=25, pi=3.14ブール値は Number のサブクラスです。True=1, False=0
String文字列シーケンス不可変s="Hello"エスケープ文字 \n をサポートします。raw 文字列は r"..." を使います
List順序付き可変シーケンス可変lst=[1,2,"a"]追加、削除、変更、検索をサポートします。要素は異なる型でもよいです
Tuple順序付き不可変シーケンス不可変t=(1,2,"a")単一要素にはカンマが必要です:(5,)。可変オブジェクトのネストは可能です
Set順序なし一意集合可変s={1,2,3}{} または set() で作ります。空集合は必ず set() を使います
Dictionarykey-value マッピング可変d={"name":"Alice"}key は不可変である必要があります。value は任意の型でよいです

データ型の詳細

1. Number 型

python
a = 10          # int
b = 3.14        # float
c = 2 + 3j      # complex
d = True        # bool (True=1, False=0)

注:type(3.14)<class 'float'> を返し、type(True)<class 'bool'> を返します。

2. String 型

python
s = "Python"    # 基本文字列
s2 = 'It\'s ok' # エスケープ文字
s3 = r"C:\path" # raw 文字列

3. List 型

python
fruits = ["apple", "banana", 3]  # 混合型
fruits.append("orange")          # 要素を追加
fruits[0] = "pear"               # 要素を変更

4. Tuple 型

python
point = (10, 20)               # 不可変
mixed = ("a", [1,2], 3.14)     # 可変オブジェクトをネスト

5. Set 型

python
nums = {1,2,2,3}               # 自動重複削除 -> {1,2,3}
s = set()                      # 空集合
s.add(5)                       # 要素を追加

6. Dictionary 型

python
user = {"name": "Bob", "age": 25}
user["email"] = "bob@example.com"  # key-value を追加
del user["age"]                    # key-value を削除

型変換

関数用途注意点
int(x)整数へ変換int("123") → 123浮動小数点数を整数へ変換すると小数部分を切り捨てます(int(3.9)=3
float(x)浮動小数点へ変換float("3.14") → 3.14整数を浮動小数点へ変換すると .0 が付きます
str(x)文字列へ変換str(123) → "123"すべての型を変換できます
list(x)リストへ変換list("abc") → ['a','b','c']iterable は変換できます
tuple(x)タプルへ変換tuple([1,2,3]) → (1,2,3)
set(x)集合へ変換set([1,2,2]) → {1,2}自動で重複を削除します
dict(x)辞書へ変換dict([("a",1),("b",2)])iterable な key-value ペアが必要です

演算子

Java と同じです。

整数除算演算子 //

  • 切り下げ規則:結果は負の無限大方向へ丸められます(Java のゼロ方向丸めとは違います)。
python
print(9  // 2)   # 出力4 (Java と同じ)
print(-9 // 2)   # 出力-5 (Java では -9/2=-4)
print(9.5 // 2)  # 出力4.0

応用場面:

  • ページング計算:total_pages = total_items // items_per_page
  • 時間変換:minutes = total_seconds // 60

指数演算子 **

  • 浮動小数点指数をサポート2 ** 0.5 → 1.4142(Python は標準でサポートし、Java では Math.pow() が必要)
  • 連鎖演算2 ** 2 ** 3 → 256(右結合)
python
# a**b  a の b 乗
# 科学記数法
print(1e3 ** 2)  # 出力1000000.0
# 負の指数
print(2 ** -3)   # 出力0.125

制御文

条件文

python
# 単一分岐
if condition:
    # 4スペースでインデントしたコードブロック

# 二分岐
if condition:
    # 成立時に実行
else:
    # 不成立時に実行

# 多分岐
if condition1:
    # 条件1が成立
elif condition2:
    # 条件1は不成立だが条件2が成立
else:
    # すべての条件が不成立

特性

  • 条件式:ブール判定です。比較演算子(>, ==, !=)と論理演算子(and, or, not)をサポートします。
  • 暗黙変換:非ゼロ数値と非空シーケンスは True と見なされ、ゼロ値/空値は False と見なされます。
  • 短絡評価and の左側が False の場合、右側を計算しません。or の左側が True の場合、右側をスキップします。

二、ループ構造

1. while ループ

python
while condition:
    # 条件が True の時に繰り返し実行
    # 無限ループを避けるため、条件更新文が必要

# 例
count = 0
while count < 5:
    print(count)
    count += 1
else:
    print("ループが正常終了しました")

特性

  • 条件更新:ループ本体内で条件関連の変数を変更する必要があります。
  • else 句:ループが正常終了した時(break で中断されていない時)に実行されます。

2. for ループ

python
for item in iterable:
    # iterable オブジェクトを走査(リスト/文字列/辞書など)

# 辞書を走査する例
user = {"name": "Bob", "age": 25}
for key in user:
    print(f"{key}: {user[key]}")

range 関数

パラメータ形式出力シーケンス
range(stop)range(5)0-4
range(start, stop)range(2,7)2-6
range(start, stop, step)range(1,10,2)1,3,5,7,9

関数

python
# 関数定義
def 関数名 (仮引数リスト):
	関数本体
	return 戻り値

None 型

None は特殊なリテラルで、Java の null に相当します。 <class 'NoneType'>

関数ドキュメント:

python
# 複数行コメントを関数本体の前に書く
def function(x,y):
	"""
	全体説明
	:param x: 仮引数 x の説明
	:param y: 仮引数 y の説明
	:return: 戻り値説明
	"""

関数の規範性

1. 複数の戻り値

python
def test_return():
	return 1,2
x, y = test_return()

2. 構造化された戻り値

python
def get_user_info():
    """構造化データを返す"""
    return {
        "name": "Alice",
        "age": 25,
        "email": "alice@example.com"
    }

user = get_user_info()
print(user["name"])  # 出力:Alice

3. キーワード引数

python
def create_user(name: str, age: int, gender: str = "不明"):
    """ユーザー情報を作成"""
    return {
        "name": name,
        "age": age,
        "gender": gender
    }

# キーワード引数で呼び出す
user = create_user(name="山田", age=28, gender="男")

可変長引数

python
def sum_numbers(*numbers):
    """任意個数の数値の合計を計算"""
    return sum(numbers)

print(sum_numbers(1,2,3,4))  # 出力:10
print(sum_numbers())         # 出力:0

キーワード可変長引数(kwargs)

python
def print_person_info(**info):
    """人物情報を表示"""
    for key, value in info.items():
        print(f"{key}: {value}")

print_person_info(name="佐藤", age=35, job="エンジニア")

匿名関数(lambda 関数)

python
lambda 引数リスト: 式

square = lambda x: x**2
print(square(5))  # 出力25

コンテナ

リスト(List)

  • 順序付き可変:要素順は固定で、追加、削除、変更、検索をサポートします。
  • 混合保存:異なる型の要素(数値/文字列/オブジェクト)を保存できます。
  • スライス対応[start:end:step] のスライス操作をサポートします。
python
# 定義
listName = [要素1,要素2,要素3...]

# 空変数を定義
listName = []
listName = list()

リストには異なる型の要素を保存できます。 listName[1] は二つ目の要素を取り出します。 逆方向インデックスも使えます。最後の要素は -1 で、順に前へ戻ります。

メソッド機能説明
index(要素)ある要素の添字を探し、その添字を返します。ない場合は ValueError になります
append()末尾に要素を追加します
extend()別のリストを結合します
insert()指定位置に要素を挿入します
remove()最初に一致した要素を削除します
pop()指定インデックスの要素を削除して返します(デフォルトは末尾)
sort()その場でソートします(昇順)
reverse()その場で要素順を反転します

タプル(Tuple)

  • 順序付き不可変:要素順は固定で、作成後は変更できません。
  • 混合保存:異なる型の要素をサポートします。
  • ハッシュ可能性:辞書の key として使えます。
python
# 定義方法
(要素,要素,要素)
変数名 = (要素,要素,要素)
# 空タプルを定義
変数名 = ()
変数名 = tuple()
メソッド機能説明
index()要素のインデックスを探します
count()要素の出現回数を数えます

文字列(String)

  • 文字シーケンス:各文字を一つの要素として扱います。
  • 不可変性:どの変更も新しい文字列を生成します。
  • エンコード対応:UTF-8/GBK などのエンコードをサポートします。
python
text = "Hello, 世界!"
unicode_text = text.encode('utf-8')  # b'Hello, \xe4\xb8\x96\xe7\x95\x8c!'
メソッド機能説明
split()区切り文字で分割text.split() → ["Hello,", "世界!"]
replace()部分文字列を置換text.replace("World", "Python")
strip()先頭と末尾の空白を削除"\t text \n".strip() → "text"

集合(Set)

  • 順序なし一意:自動で重複を削除し、要素順は固定されません。
  • 数学的集合演算:和集合、積集合、差集合などをサポートします。
  • 可変性:要素を動的に追加、削除できます。
python
# 集合の定義
{要素,要素,要素}
変数名 = {要素,要素,要素}

# 空集合を定義
変数名 = set()
メソッド機能説明
add()追加
remove()削除
Object pop()ランダムに一つの要素を取り出し、削除します
clear()空にします
集合1.difference(集合2)二つの集合の差集合を取り出します
集合1.difference_update(集合2)差集合を反映して更新します
集合1.union(集合2)二つの集合を結合します
len()集合内の要素数を数えます

辞書(Dict)

  • key-value 保存:key は一意で、value は変更できます。
  • ハッシュテーブル実装:O(1) 時間計算量で検索できます。
  • 動的拡張:key-value を動的に追加、削除できます。
python
# 辞書の定義
{key: value,key: value,key: value}
dictName = {key: value,key: value,key: value}

# 空辞書を定義
dictName = {} 
dictName = dict()

辞書の key に辞書は使えません。それ以外は基本的に制限がありません。

メソッド機能説明
value = dictName[key]key で value を取得します
dict[Key] = Value新規追加/更新
pop(Key)要素を取得して削除します
len(dict)辞書内の要素数を数えます
clear()辞書を空にします
keys()辞書内のすべての key を取得します
values()辞書内のすべての value を取得します
items()辞書内のすべての key-value ペアを取得します
get()安全に値を取得します。例:user.get("address", "不明")

まとめ

五つのデータコンテナはすべて for ループで走査できます。

  • len(コンテナ):コンテナ内の要素数を数えます。
  • max(コンテナ):コンテナ内の最大要素を探します。
  • min(コンテナ):コンテナ内の最小要素を探します。
  • list(コンテナ):コンテナをリストへ変換します。
  • str(コンテナ):コンテナを文字列へ変換します。
  • tuple(コンテナ):コンテナをタプルへ変換します。
  • set(コンテナ):コンテナを集合へ変換します。
  • sorted(コンテナ,[reverse=True]):コンテナをソートします。
コンテナ型可変性順序性要素一意性典型的な用途
リスト可変順序あり重複可動的データ集合、キュー/スタック実装
タプル不可変順序あり重複可固定設定パラメータ、関数の複数戻り値
文字列不可変順序あり重複可テキスト処理、文字シーケンス操作
集合可変順序なし一意重複削除、集合演算、メンバー検査
辞書可変順序なしkey は一意key-value 保存、高速データ検索

ファイルエンコード

open()

python
open(
    file,          # ファイルパス(絶対/相対パスをサポート)
    mode='r',      # アクセスモード(必須パラメータ)
    encoding='utf-8'  # エンコード形式(テキストモードでは必須)
)
基本モード拡張モード機能説明
'r''rt'テキスト読み取り専用(デフォルト)
'w''wt'テキスト上書き書き込み
'a''at'テキスト追記書き込み
'b''rb'/'wb'バイナリモード
'+''r+'読み書きモード(他のモードと組み合わせが必要)

読み取り

python
# 全内容を読み取る
content = f.read()  # 文字列(テキストモード)または bytes(バイナリモード)を返す

# 指定バイト数を読み取る
chunk = f.read(100)  # 先頭100バイトを読み取る

# 行ごとに読み取る
line = f.readline()  # 一行を読み取る(改行文字を保持)
lines = f.readlines()  # すべての行を読み取る(リストを生成)

# 反復読み取り(大きなファイルで推奨)
for line in f:
    process(line)  # 自動で一行ずつ読み取り、メモリにやさしい

書き込み

python
# 基本書き込み
f.write("Hello World")  # 文字列を書き込む
f.writelines(["line1\n","line2"])  # 文字列リストを書き込む

# ファイルポインタ制御
f.seek(0)       # ファイル先頭へ移動(テキストモード)
f.tell()        # 現在のポインタ位置を取得

コンテキストマネージャ(with 文)

python
with open("test.txt", "r") as f:
    content = f.read()
# ファイルは自動で閉じるため、明示的に close() を呼ぶ必要はない

# 等価コード(内部実装)
f = open("test.txt", "r")
try:
    content = f.read()
finally:
    f.close()

例外

指定例外を捕捉する

python
try:
	# エラーが発生する可能性があるコード
except NameError as e::
	# 指定例外が発生した後のコード

複数例外を捕捉する

python
# 複数例外はタプルで宣言して捕捉する
try:
	# エラーが発生する可能性があるコード
except (NameError,ZeroDivisionError):
	# 指定例外が発生した後のコード

例外 else

python
# 例外 else。例外が発生しなかった場合に実行するコード
try:
	# エラーが発生する可能性があるコード
except:
	# 例外発生後のコード
else:
	# 例外が発生しなかった後のコード

例外 finally

python
# 例外 finally。例外が発生してもしなくても実行するコード
try:
	# エラーが発生する可能性があるコード
except:
	# 例外発生後のコード
else:
	# 例外が発生しなかった後のコード
finally:
	# 例外の有無に関係なく実行するコード

モジュールとパッケージ

モジュール

  • 本質:拡張子が .py の Python ファイルです。
  • 主な役割
    • コードのカプセル化と再利用
    • 名前空間の分離(名前衝突を避ける)
    • モジュール化開発をサポート
構文形式機能説明
import moduleモジュール全体をインポートimport math
from module import func特定メンバーをインポートfrom math import sqrt
import module as mモジュール別名import numpy as np

パッケージ

パッケージ定義規則

tex
my_package/
├── __init__.py       # パッケージ初期化ファイル
├── module_a.py       # モジュールA
├── module_b.py       # モジュールB
└── subpackage/       # サブパッケージ
    ├── __init__.py
    └── module_c.py
  • __init__.py:ディレクトリが Python パッケージであることを示し、パッケージの初期化動作を制御します。
  • モジュールファイル:インポート可能な関数/クラス/変数を含みます。
  • サブパッケージ構造:多層のパッケージネストをサポートします。

Released under the MIT License.